Github-jcjohnson/torch-rnn代码详解

Github-jcjohnson/torch-rnn代码详解

[email protected]

http://www.cnblogs.com/swje/

作者:Zhouwan

 2016-3-18


声明:

1)本文仅供学术交流,非商用。所以每一部分具体的参考资料并没有详细对应。如果某部分不小心侵犯了大家的利益,还望海涵,并联系博主删除。

2)本人才疏学浅,整理总结的时候难免出错,还望各位前辈不吝指正,谢谢。

请联系:[email protected] 或[email protected]

本研究课题系本人本科毕业论文,具体学习计划见http://www.cnblogs.com/swje/p/5068069.html

后面会实时更新,希望能与大家相互交流,共同进步!

继karpathy的cha-rnn之后,最近在看jcjohnson写的torch-rnn,作为梳理和总结,发表此篇文章记录一下。



源文件及参考文献如下:

torch-rnn代码@Github:https://github.com/jcjohnson/torch-rnn



学习体会:

1、torch-rnn 提供了一个高性能、可再用的RNN和LSTM模块,使用这些模块对字符级别的语言建模和char-rnn是类似的。RNN和LSTM模块仅仅依赖于torch和nn,所以可以很容易地整合到现有的项目中。相比于char-rnn,torch-rnn的速度快了1.9倍,并且节约了七倍的内存。

2、实验运行环境:需要安装Python 2.7 和HDF5 库的头文件;预处理脚本使用Python 2.7编写的;实验需要在torch7平台运行,并用LUA语言编程;为了提供CUDA和OpenCL支持以进行GPU加速,需要安装相应的LUA安装包。

3、要想训练一个模型并用它来生成新的文本,需要遵循以下三个步骤:

  • 数据预处理:在训练前,需要用脚本scripts/preprocess.py对数据进行预处理,这将会生成一个包含数据的预处理版本的HDF5 文件和 JSON 文件。 比如生成了my_data.h5 和 my_data.json两个文件。
  • 训练模型:预处理之后,需要用脚本train.lua 来训练模型。这一步是最慢的。

   可以运行下面的代码来训练:th train.lua -input_h5 my_data.h5 -input_json my_data.json。以上代码将会读取存储在my_data.h5 和 my_data.json两个文件中的数据,运行一段时间后,将会生成检查点文件checkpoint,文件命名类似cv/checkpoint_1000.t7。

   你可以通过参数设置改变RNN模型类型、隐藏层大小和 RNN层数,选择使用CUDA在GPU模式下运行或在CPU模式下运行,也可以选择是否使用OpenCL,还有其他参数设置,参考这里

  • 从模型中抽样:训练完一个模型之后,你可以通过使用脚本sample.lua从文本中抽样来生成新的文本。运行以下代码:th sample.lua -checkpoint cv/checkpoint_10000.t7 -length 2000,将会从前一步载入训练好的检查点集 ,从中抽取2000个字符,并将结果打印到控制台上。

    你可以通过参数设置,选择使用CUDA在GPU模式下运行或者在CPU模式下运行,也可以选择是否使用OpenCL,还有其他参数设置,参考这里

4、为了用基准问题测试torch-rnn和char-rnn,我们对莎士比亚散文集训练LSTM语言模型,RNN层数和RNN大小分别设置为1、2、3层和64、128、256和512,并将minibatch大小设为50,序列长度设为50,dropout设为0。对于同一大小RNN模型的两次实验中,在前100次训练迭代过程中,我们记录下向前和向后传播的时间和GPU的内存使用情况,并使用这些测量值来计算平均时间和内存使用情况。所有的基准测试程序数值都是在一个配置有 Intel i7-4790k CPU, 32 GB 主存和带有一个 Titan X GPU的机器上运行的。

从实验结果出可以看出,torch-rnn在任何模型大小下都比char-rnn运行速度快,小模型的加速比更大一些。对于有128个隐藏单元的单层LSMT来说,加速了1.9倍;对于较大的模型,我们达到大约1.4倍的加速。

节约GPU内存方面来看,torch-rnn在所有的模型大小上都胜过char-rnn,但是,对于较大一些的模型节约内存更多一些,例如:对于有512个隐藏单元的模型来说,torch-rnn比char-rnn少用了七倍内存。

时间: 2024-10-22 08:34:38

Github-jcjohnson/torch-rnn代码详解的相关文章

DeepLearning tutorial(3)MLP多层感知机原理简介+代码详解

DeepLearning tutorial(3)MLP多层感知机原理简介+代码详解 @author:wepon @blog:http://blog.csdn.net/u012162613/article/details/43221829 本文介绍多层感知机算法,特别是详细解读其代码实现,基于python theano,代码来自:Multilayer Perceptron,如果你想详细了解多层感知机算法,可以参考:UFLDL教程,或者参考本文第一部分的算法简介. 经详细注释的代码:放在我的gith

DeepLearning tutorial(4)CNN卷积神经网络原理简介+代码详解

DeepLearning tutorial(4)CNN卷积神经网络原理简介+代码详解 @author:wepon @blog:http://blog.csdn.net/u012162613/article/details/43225445 本文介绍多层感知机算法,特别是详细解读其代码实现,基于python theano,代码来自:Convolutional Neural Networks (LeNet).经详细注释的代码和原始代码:放在我的github地址上,可下载. 一.CNN卷积神经网络原理

DeepLearning tutorial(1)Softmax回归原理简介+代码详解

DeepLearning tutorial(1)Softmax回归原理简介+代码详解 @author:wepon @blog:http://blog.csdn.net/u012162613/article/details/43157801 本文介绍Softmax回归算法,特别是详细解读其代码实现,基于python theano,代码来自:Classifying MNIST digits using Logistic Regression,参考UFLDL. 一.Softmax回归简介 关于算法的详

2. 观点提取和聚类代码详解

1. pyhanlp介绍和简单应用 2. 观点提取和聚类代码详解 1. 前言 本文介绍如何在无监督的情况下,对文本进行简单的观点提取和聚类. 2. 观点提取 观点提取是通过依存关系的方式,根据固定的依存结构,从原文本中提取重要的结构,代表整句的主要意思. 我认为比较重要的依存关系结构是"动补结构", "动宾关系", "介宾关系"3个关系.不重要的结构是"定中关系", "状中结构", "主谓关系&q

tiny_cnn代码详解(3)——层间继承关系

在上一篇博文中我们顺利将tiny_cnn的程序调试通过,在这篇博文中我们尝试从整体角度给出对tiny_cnn这个深度学习框架的解读,重点论述一下其各个层直接类封装的继承关系. 一.卷积神经网络快速入门 tiny_cnn作为卷积神经网络的一种实现形式,在探讨其框架结构之前,首先需要简要介绍一些卷积神经网络相关的知识.首先,给出经典卷积神经网络的网络结构: 这个是经典的LeNet-5的网络结构图,五层网络.最早用于支票上的手写数字识别,也是最早的商业化的深度学习模型.从上图中可以看出,卷积神经网络主

jQuery选择器代码详解(四)——Expr.preFilter

原创文章,转载请注明出处,多谢! Expr.preFilter是tokenize方法中对ATTR.CHILD.PSEUDO三种选择器进行预处理的方法.具体如下: Expr.preFilter : { "ATTR" : function(match) { /* * 完成如下任务: * 1.属性名称解码 * 2.属性值解码 * 3.若判断符为~=,则在属性值两边加上空格 * 4.返回最终的mtach对象 * * match[1]表示属性名称, * match[1].replace(rune

JQuery选择器代码详解(三)——tokenize方法

原创文章,转载请注明出处,多谢! /* * tokenize函数是选择器解析的核心函数,它将选择器转换成两级数组groups * 举例: * 若选择器为"div.class,span",则解析后的结果为: * group[0][0] = {type:'TAG',value:'div',matches:match} * group[0][1] = {type:'CLASS',value:'.class',matches:match} * group[1][0] = {type:'TAG'

开胃小菜——impress.js代码详解

README 友情提醒,下面有大量代码,由于网页上代码显示都是同一个颜色,所以推荐大家复制到自己的代码编辑器中看. 今天闲来无事,研究了一番impress.js的源码.由于之前研究过jQuery,看impress.js并没有遇到太大的阻碍,读代码用了一个小时,写这篇文章用了近三个小时,果然写文章比读代码费劲多了. 个人感觉impress.js的代码量(算上注释一共不到1000行)和难度(没有jQuery的各种black magic= =)都非常适合新手学习,所以写一个总结,帮助大家理解源码. 考

jQuery选择器代码详解(七)——elementMatcher函数

要读懂Sizzle的Compile执行过程,首先需要弄清楚涉及的各个子程序的功能和关键变量和作用,我将逐一对jQuery-1.10.2版本的Compile代码进行说明,望能给予大家帮助. elementMatcher(matchers) 1.源码 function elementMatcher(matchers) { return matchers.length > 1 ? function(elem, context, xml) { var i = matchers.length; while