Dieses Beispiel trainiert einen mehrschichtigen RNN (Elman, Gru oder LSTM) über eine Sprachmodellierungsaufgabe. Standardmäßig verwendet das Trainingsskript den bereitgestellten PTB -Datensatz. Das geschulte Modell kann dann vom Skript generieren, um neuen Text zu generieren. Dies ist eine Portierung von Pytorch/Beispielen/Word_Language_Model, sodass es auf Floydhub verwendet wird.
Das Skript main.py akzeptiert die folgenden Argumente:
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 modelMit diesen Argumenten können verschiedene Modelle getestet werden. Beispielsweise erzeugen die folgenden Argumente langsamere, aber bessere Modelle:
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.30Diese Verwirrungen sind gleich oder besser als regelmäßiges Netzwerknetzwerk (Zaremba et al. 2014) und ähneln der Verwendung der Ausgabeeinbettung, um Sprachmodelle zu verbessern (Press & Wolf 2016 und Word -Vektoren und Wortklassifizierer: Ein Verlust -Rahmen für die Sprachmodellierung (Inan et al.
Bald.
Hier sind die Befehle zum Training, zur Bewertung und dem Servieren Ihrer Sprachmodellierungsaufgabe in Floydhub.
Melden Sie sich vor dem Start bei Floydhub mit dem Befehl floyd login an, gib und dann das Projekt initieren:
$ git clone https://github.com/floydhub/word-language-model.git
$ cd word-language-model
$ floyd init word-language-modelBevor Sie beginnen, müssen Sie den Penn TreeBank-3-Datensatz als Floydhub-Datensatz nach dieser Anleitung hochladen: Erstellen und Hochladen eines Datensatzes. Dann sind Sie bereit, mit verschiedenen Sprachmodellen zu spielen.
# 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 "Notiz:
--gpu Führen Sie Ihren Job in einer Floydhub-GPU-Instanz aus.--env pytorch-0.2 bereitet eine Pytorch-Umgebung für Python 3 vor.--data <USERNAME>/dataset/<PENN-TB3>/<VERSION>:input Der vorherige Penn-Treebank-3-Datensatz im Vorfeld der PENN-Datenträger im Ordner /input im Container für unseren Job. Das Modell verwendet das nn.RNN -Modul (und seine Schwestermodule nn.GRU und nn.LSTM ), mit dem das Cudnn -Backend automatisch verwendet wird, wenn sie auf CUDA mit installiertem Cudnn ausgeführt werden.
Während des Trainings wird ein Tastaturinterrupt (STRG-C) eingehalten, das Training gestoppt und das aktuelle Modell anhand des Testdatensatzes bewertet.
Sie können den Fortschritt mit dem Befehl protokollieren. Die ersten 2 Beispiele für das Training sollten in einer GPU -Instanz in etwa 5 Minuten und 40 Zoll auf einer CPU -Einrichtung abgeschlossen sein. Das letzte Beispiel sollte etwa 30 'an einer GPU -Instanz und über 3 Stunden auf einem CPU Instace dauern.
Es ist Zeit, unser Modell zu bewerten, das einen Text generiert:
# 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 "Wir haben Ihnen ein vorgebildetes Modell zur Verfügung gestellt, das für 40 Epochen trainiert wurde, die Verwirrung von 87,17 erreichen:
# 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 unterstützt den Untergangsmodus für Demo- und Testzwecke. Bevor Sie Ihr Modell über REST -API bedienen, müssen Sie eine floyd_requirements.txt erstellen und die darin enthaltene Flask -Anforderung deklarieren. Wenn Sie einen Job mit --mode serve Flag ausführen, führt Floydhub die app.py -Datei in Ihrem Projekt aus und findet sie an einen dynamischen Serviceendpunkt an:
floyd run --gpu --mode serve --env pytorch-0.2 --data < USERNAME > /dataset/ < PENN-TB 3> / < VERSION > :input --data < REPLACE_WITH_JOB_OUTPUT_NAME > :modelIn dem obigen Befehl wird ein Serviceendpunkt für diesen Job in Ihrer Terminalkonsole ausgedruckt.
Der Serviceendpunkt dauert ein paar Minuten, um fertig zu werden. Sobald es abgelaufen ist, können Sie mit dem Modell interagieren, indem Sie eine Postanforderung mit der Anzahl der Wörter und der Temperatur senden, mit der das Modell Text generiert wird:
# 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/vk47ixT8NeYBTFeMavbWtaJeder Job, der im Serviermodus ausgeführt wird, bleibt bis zum Erreichen der maximalen Laufzeit. Denken Sie also, sobald Sie mit dem Testen fertig sind, den Auftrag heruntergefahren!
Beachten Sie, dass sich diese Funktion im Vorschautmodus befindet und noch nicht bereitgestellt wird
Einige nützliche Ressourcen für NLP für Deep Learning and Language Modeling Task:
Bei Fragen zögern Sie nicht, mich zu kontaktieren oder ein Problem zu öffnen!