此示例在语言建模任务上训练多层RNN(Elman,GRU或LSTM)。默认情况下,培训脚本使用提供的PTB数据集。然后,生成脚本可以使用训练有素的模型来生成新文本。这是pytorch/示例/word_language_model的端口。
main.py脚本接受以下参数:
optional arguments:
-h, --help show this help message and exit
--data DATA location of the data corpus
--model MODEL type of recurrent net (RNN_TANH, RNN_RELU, LSTM, GRU)
--emsize EMSIZE size of word embeddings
--nhid NHID number of hidden units per layer
--nlayers NLAYERS number of layers
--lr LR initial learning rate
--clip CLIP gradient clipping
--epochs EPOCHS upper epoch limit
--batch-size N batch size
--bptt BPTT sequence length
--dropout DROPOUT dropout applied to layers (0 = no dropout)
--decay DECAY learning rate decay per epoch
--tied tie the word embedding and softmax weights
--seed SEED random seed
--cuda use CUDA
--log-interval N report interval
--save SAVE path to save the final model有了这些论点,可以测试各种模型。例如,以下参数产生的模型较慢,但模型更好:
python main.py --cuda --emsize 650 --nhid 650 --dropout 0.5 --epochs 40 # Test perplexity of 80.97
python main.py --cuda --emsize 650 --nhid 650 --dropout 0.5 --epochs 40 --tied # Test perplexity of 75.96
python main.py --cuda --emsize 1500 --nhid 1500 --dropout 0.65 --epochs 40 # Test perplexity of 77.42
python main.py --cuda --emsize 1500 --nhid 1500 --dropout 0.65 --epochs 40 --tied # Test perplexity of 72.30These perplexities are equal or better than Recurrent Neural Network Regularization (Zaremba et al. 2014) and are similar to Using the Output Embedding to Improve Language Models (Press & Wolf 2016 and Tying Word Vectors and Word Classifiers: A Loss Framework for Language Modeling (Inan et al. 2016), though both of these papers have improved perplexities by using a form of recurrent dropout (variational dropout).
很快。
这是在FloyDhub上培训,评估和服务您的语言建模任务的命令。
启动之前,请使用Floyd登录命令在Floydhub上登录,然后分叉并初始化项目:
$ git clone https://github.com/floydhub/word-language-model.git
$ cd word-language-model
$ floyd init word-language-model在开始之前,您需要将Penn Treebank-3数据集上传为FloyDhub数据集,遵循本指南:创建和上传数据集。然后,您将准备使用不同的语言模型。
# Train a LSTM on PTB with CUDA, reaching perplexity of 114.22
floyd run --gpu --env pytorch-0.2 --data < USERNAME > /dataset/ < PENN-TB 3> / < VERSION > :input " python main.py --cuda --epochs 7 "
# Train a tied LSTM on PTB with CUDA, reaching perplexity of 110.44
floyd run --gpu --env pytorch-0.2 --data < USERNAME > /dataset/ < PENN-TB 3> / < VERSION > :input " python main.py --cuda --epochs 7 --tied "
# Train a tied LSTM on PTB with CUDA for 40 epochs, reaching perplexity of 87.17
floyd run --gpu --env pytorch-0.2 --data < USERNAME > /dataset/ < PENN-TB 3> / < VERSION > :input " python main.py --cuda --tied "笔记:
--gpu在FloyDhub GPU实例上运行您的工作。--env pytorch-0.2为Python 3准备了Pytorch环境。--data <USERNAME>/dataset/<PENN-TB3>/<VERSION>:input将previus上传的Penn Treebank-3数据集安装在/input文件夹中,以供我们作业。该模型使用nn.RNN模块(及其姐妹模块nn.GRU和nn.LSTM ),如果安装了cudnn,它将自动使用cudnn后端。
在训练过程中,如果收到了键盘中断(CTRL-C),则停止训练,并针对测试数据集评估当前模型。
您可以使用日志命令沿着进度遵循进度。前两个培训示例应在大约5分钟内在GPU实例中完成,在CPU中进行40'。最后一个示例应在GPU实例上大约需要30',并且在CPU方向上应花费3个小时以上。
是时候评估我们的模型生成一些文本了:
# Generate samples from the trained LSTM model.
floyd run --gpu --env pytorch-0.2 --data < USERNAME > /dataset/ < PENN-TB 3> / < VERSION > :input --data < REPLACE_WITH_JOB_OUTPUT_NAME > :model " python generate.py --cuda "我们为您提供了一个预先训练的模型,该模型训练了40个时期,达到87.17的困惑:
# Generate samples from the trained LSTM model.
floyd run --gpu --env pytorch-0.2 --data < USERNAME > /dataset/ < PENN-TB 3> / < VERSION > :input --data < REPLACE_WITH_JOB_OUTPUT_NAME > :model " python generate.py --cuda "FloyDhub支持示意模式进行演示和测试目的。在通过REST API服务模型之前,您需要创建一个floyd_requirements.txt并声明其中的烧瓶要求。如果您使用--mode serve标志运行工作,FloyDhub将在项目中运行app.py文件,并将其附加到动态服务端点:
floyd run --gpu --mode serve --env pytorch-0.2 --data < USERNAME > /dataset/ < PENN-TB 3> / < VERSION > :input --data < REPLACE_WITH_JOB_OUTPUT_NAME > :model上面的命令将在您的终端控制台中打印出此作业的服务端点。
服务端点将需要几分钟才能准备好。一旦启动,您就可以通过发送帖子请求的单词数量和模型来生成文本的温度来与模型进行交互:
# Template
# curl -X POST -o <NAME_&_PATH_DOWNLOADED_GENERATED_TEXT> -F "words=<NUMBER_OF_WORDS_TO_GENERATE>" -F "temperature=<TEMPERATURE>" <SERVICE_ENDPOINT>
curl -X POST -o generated.txt -F " words=100 " -F " temperature=3 " https://www.floydlabs.com/expose/vk47ixT8NeYBTFeMavbWta在服务模式下运行的任何工作都将延续到达到最大运行时。因此,一旦完成测试,请记住关闭工作!
请注意,此功能处于预览模式,尚未准备就绪
NLP上的一些有用资源用于深度学习和语言建模任务:
无论如何,错误(甚至错字)和/或功能请求请随时与我联系或打开问题!