Tensorflow LSTM Zeichen für Zeichenfolgenvorhersage

8

Ich versuche die Sprachmodellierung auf Zeichenebene zu replizieren, die in dem ausgezeichneten Artikel Ссылка demonstriert wurde mit Tensorflow.

Bisher sind meine Versuche gescheitert. Mein Netzwerk gibt normalerweise nach der Verarbeitung von etwa 800 Zeichen ein einzelnes Zeichen aus. Ich glaube, ich habe die Art und Weise, wie der Tensorfluss LSTMs und vielleicht auch RNNs implementiert hat, grundlegend falsch verstanden. Ich finde die Dokumentation schwierig zu folgen.

Hier ist die Essenz meines Codes:

Diagrammdefinition

%Vor%

Verlustberechnung

%Vor%

Schulung

%Vor%

Ausgabe mit 1 MB Shakespere-Datei zum Trainieren

%Vor%

Das ist eindeutig falsch.

Ich denke, ich bin durch den Unterschied zwischen "Batches" und "Sequenzen" verwirrt und darüber, ob der Zustand des LSTM zwischen sogenannten "Batches" (dh Untersequenzen) erhalten bleibt oder nicht p>

Ich habe den Eindruck, dass ich es mit "Batches" von Sequenzen der Länge 1 trainiert habe und dass zwischen jedem Batch State-Daten verworfen werden. Folglich findet man einfach das am häufigsten vorkommende Symbol.

Kann jemand dies bestätigen oder meinen Fehler auf andere Weise korrigieren und einen Hinweis geben, wie ich die Aufgabe der Zeichen-für-Zeichen-Vorhersage mit sehr langen Trainingssequenzen angehen sollte?

Vielen Dank.

    
curator23 12.01.2017, 19:25
quelle

1 Antwort

2

So Ihre idata sollte eine Form haben: [batch_size, maximum_sequence_length, 257]. (Falls nicht alle Sequenzen in einer Charge die gleiche Länge haben müssen Sie Pad wie nötig, und vorsichtig sein, wenn Verluste der Berechnung, dass dies nur über unwattierter Werte erfolgt.)

Der dynamic_rnn durchläuft Ihre Eingabe nach Zeit für Sie. Sie müssen also nur die Stapel durchlaufen.

Da Ihre zweite Dimension der IDATA ist 1, Sie haben Recht, dass Ihre effektive Sequenzlänge 1 ist.

Für ein Sprachmodell nicht zeichenbasierte aber mit Wort Einbettungen zu sehen diesen Tutorial.

Weitere Hinweise:

  • Wenn Sie mit einem unterschiedlichen Anzahl von Einheiten in der LSTM experimentieren wollen - prüfen, auf der Oberseite der Ausgabe eine lineare Schicht Zugabe jede Ausgabe zu projizieren (für Batch-Eintrag zum Zeitpunkt t i) bis 257, die die Zahl von Klassen Ihres Ziels.

  • Sie müssen keine Ein-Hot-Codierung des Ziels durchführen. Schauen Sie sich Sparse_softmax_cross_entropy an.

Mila Hardt 13.01.2017, 01:25
quelle

Tags und Links