跳到内容

jcjohnson/火炬

手电筒-rnn

torch-rnn为torch7提供了高性能、可重用的rnn和LSTM模块,并将这些模块用于字符级语言建模类似于char-rnn字符.

您可以找到RNN和LSTM模块的文档在这里; 除了火炬nn个,因此它们应该易于集成到现有项目中。

与char-rnn相比,torch-rnn达到速度提高1.9倍并使用最多内存减少7倍。有关更多详细信息,请参阅这个基准第节。

安装

Docker图像

克里斯蒂安·巴尔迪(Cristian Baldi)为仅CPU模式和GPU模式准备了Docker图像;你可以在这里找到他们.

系统设置

您需要安装Python 2.7和HDF5库的头文件。在Ubuntu上,您应该可以安装这样地:

sudo apt-get-y安装python2.7-devsudo apt-get安装libhdf5-dev

Python设置

预处理脚本是用Python 2.7编写的;它的依赖项在文件中要求.txt.您可以在虚拟环境中安装这些依赖项,如下所示:

虚拟环境#创建虚拟环境
来源.env/bin/激活#激活虚拟环境pip安装-r要求.txt#安装Python依赖项
#工作一段时间。。。停用#退出虚拟环境

Lua设置

主要建模代码是用Lua编写的,使用火炬; 您可以找到安装说明在这里。您需要以下Lua包:

安装火炬后,您可以通过运行以下程序安装/更新这些软件包:

#使用luarocks安装大多数东西卢亚洛克安装火炬luarocks安装nnluarocks安装optimluarocks安装lua-cjson#我们需要从GitHub安装torch-hdf5git克隆https://github.com/deepmind/torch-hdf5光盘火炬-hdf5卢亚洛克制造hdf5-0-0.rockspec

CUDA支持(可选)

要使用CUDA启用GPU加速,您需要安装CUDA 6.5或更高版本以及以下Lua软件包:

您可以通过运行以下命令来安装/更新它们:

luarocks安装cutorchluarocks安装cunn

OpenCL支持(可选)

要使用OpenCL启用GPU加速,您需要安装以下Lua包:

您可以通过运行以下程序来安装/更新它们:

luarocks安装cltorchluarocks安装clnn

OSX安装

Jeff Thompson为OSX编写了一份非常详细的安装指南可以在这里找到.

用法

要训练模型并使用它生成新文本,您需要遵循三个简单步骤:

步骤1:预处理数据

您可以将任何文本文件用于训练模型。在培训之前,您需要使用脚本预处理数据脚本/预处理.py; 这将生成一个HDF5文件和JSON文件,其中包含数据的预处理版本。

如果您的培训数据存储在我的数据.txt,您可以这样运行脚本:

python脚本/预处理.py\--输入文本my_data.txt\--输出h5我的数据h5\--output_json我的数据.json

这将生成文件我的数据h5我的数据.json这将传递给培训脚本。

您可以使用更多的标志来配置预处理;在这里阅读他们

步骤2:训练模型

预处理数据后,需要使用火车.lua脚本。这将是最慢的一步。您可以这样运行培训脚本:

第h列lua-输入h5 my_data.h5-输入json my_data.json

这将读取存储在我的数据h5我的数据.json,运行一段时间,并使用将检查点保存到文件名称,如cv/检查点_1000.t7.

您可以更改RNN模型类型、隐藏状态大小和RNN层数,如下所示:

第th train.lua-input_h5 my_data.h5-input_json my_data.json-model_type rnn-num_layers 3-rnn_size 256

默认情况下,这将使用CUDA在GPU模式下运行;要在仅CPU模式下运行,请添加标志-gpu-1.

要使用OpenCL运行,请添加标志-gpu_后端opencl.

您可以使用更多的标志来配置培训;在这里阅读他们.

步骤3:从模型中取样

训练模型后,可以使用脚本从中采样生成新文本样品.lua。按如下方式运行:

th sample.lua-检查点cv/checkpoint_10000.t7-长度2000

这将加载经过训练的检查点cv/检查点_10000.t7从上一步中抽取2000个字符,并将结果打印到控制台。

默认情况下,采样脚本将使用CUDA在GPU模式下运行;要在仅CPU模式下运行,请添加标志-gpu-1要在OpenCL模式下运行,请添加标志-gpu_后端opencl.

您可以使用更多标志来配置采样;在这里阅读他们.

基准

要进行基准测试手电筒-rnn反对char-rnn字符,我们使用每一种语言来训练小震数据集的LSTM语言模型具有1、2或3层,RNN大小为64、128、256或512。对于每一个,我们使用50的小批量,一个序列长度为50,无辍学。对于每个模型大小和两种实现,我们记录向前/向后时间和前100次训练迭代的GPU内存使用情况,并使用这些测量值计算平均时间和内存用法。

所有基准测试都在一台配备Intel i7-4790k CPU、32GB主内存和Titan X GPU的机器上运行。

下面我们显示了这两种实现的前进/后退时间,以及手电筒-rnn结束char-rnn字符我们看到了手电筒-rnnchar-rnn字符在所有型号中,较小的型号提供较大的加速;对于具有128个隐藏单元的单层LSTM,我们实现了1.9倍加速; 对于更大的模型,我们实现了1.4倍的加速比。

下面我们展示了这两种实现的GPU内存使用情况,以及手电筒-rnn结束char-rnn字符。再次手电筒-rnn跑赢大市char-rnn字符在所有型号上,但在这里,节省的成本对于较大的模型:对于具有512个隐藏单元的模型,我们使用内存减少7倍char-rnn字符.

TODO(TODO)

  • 摆脱Python/JSON/HDF5依赖关系?

关于

火炬用高效、可重复使用的RNN和LSTM

资源

许可证

星星

观察者

叉子

发布

未发布版本

包装

未发布包