この例では、言語モデリングタスクで多層RNN(Elman、Gru、またはLSTM)を訓練します。デフォルトでは、トレーニングスクリプトは提供されたPTBデータセットを使用します。訓練されたモデルは、Generateスクリプトで新しいテキストを生成するために使用できます。これは、pytorch/examples/word_language_modelの移植であり、floydhubで使用されます。
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.30これらの困惑は、再発性ニューラルネットワークの正規化と等しいか、それ以上であり(Zaremba etal。2014)、出力迎えを使用して言語モデルを改善することに似ています(Press&Wolf 2016およびTying Word Vectors and Word分類器:言語モデリングの損失フレームワーク(Inan etal。2016)は、両方ともこれらの紙の滴を使用した透過性を使用した透過性を改善します。
すぐ。
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私たちの仕事のコンテナ内の/inputフォルダーに、PreviusアップロードされたPenn TreeBank-3データセットをマウントします。このモデルは、 nn.RNNモジュール(およびその姉妹モジュールnn.GRUおよびnn.LSTM )を使用します。
トレーニング中、キーボード割り込み(CTRL-C)を受信すると、トレーニングが停止し、現在のモデルがテストデータセットに対して評価されます。
Logsコマンドを使用して、進行状況に沿ってフォローできます。トレーニングの最初の2つの例は、GPUインスタンスで約5分、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 "私たちは、87.17の困惑に達する40のエポックのために訓練された事前に訓練されたモデルを提供しました。
# 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上記のコマンドは、ターミナルコンソールでこのジョブのサービスエンドポイントを印刷します。
サービスエンドポイントは、準備が整うのに数分かかります。それが終わったら、モデルの数とモデルがテキストを生成するために使用する温度でPOSTリクエストを送信することにより、モデルと対話できます。
# 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に関するいくつかの有用なリソース:
どんな質問でも、バグ(タイプミス)や機能のリクエストは、私に連絡したり、問題を開いたりすることをためらわないでください!