Tensorflow, beste Möglichkeit, den Zustand in RNNs zu speichern?

10

Ich habe derzeit den folgenden Code für eine Reihe von verketteten RNNs im Tensorflow. Ich verwende MultiRNN nicht, da ich später etwas mit der Ausgabe jeder Ebene machen sollte.

%Vor%

Momentan habe ich eine feste Anzahl von Zeitschritten. Ich möchte es jedoch ändern, um nur einen Zeitschritt zu haben, aber erinnere mich an den Zustand zwischen den Chargen. Ich müsste daher für jede Ebene eine Statusvariable erstellen und ihr den Endstatus jeder Ebene zuweisen. So etwas.

%Vor%

Dann müsste ich für jeden Layer den gespeicherten Zustand in meiner sess.run-Funktion auswerten und meine Trainingsfunktion aufrufen. Ich müsste dies für jede Ebene tun. Das scheint eine Art Streit zu sein. Ich müsste jeden gespeicherten Zustand verfolgen und im Lauf auswerten. Auch dann müsste der Zustand von meiner GPU in den Host-Speicher kopiert werden, was ineffizient und unnötig wäre. Gibt es einen besseren Weg, dies zu tun?

    
chasep255 22.06.2016, 13:10
quelle

3 Antworten

18

Hier ist der Code, um den Anfangszustand des LSTM zu aktualisieren, wenn state_is_tuple=True durch Definition von Zustandsvariablen definiert ist. Es unterstützt auch mehrere Ebenen.

Wir definieren zwei Funktionen - eine für das Erhalten der Zustandsvariablen mit einem anfänglichen Nullzustand und eine Funktion für das Zurückgeben einer Operation, die wir an session.run übergeben können, um die Zustandsvariablen mit dem letzten versteckten Zustand des LSTM zu aktualisieren / p> %Vor%

Damit können wir den Status des LSTM nach jedem Batch aktualisieren. Beachten Sie, dass ich tf.nn.dynamic_rnn zum Abrollen verwende:

%Vor%

Der Hauptunterschied zu dieser Antwort ist, dass state_is_tuple=True den Status des LSTM zu einem LSTMStateTuple macht, das zwei Variablen enthält (Zellenstatus) und versteckter Zustand) statt nur einer einzelnen Variablen. Wenn Sie mehrere Ebenen verwenden, wird der LSTM-Status zu einem Tupel von LSTMStateTuples - eins pro Ebene.

Zurücksetzen auf Null

Wenn Sie ein trainiertes Modell für die Vorhersage / Decodierung verwenden, möchten Sie den Status möglicherweise auf Null zurücksetzen. Dann können Sie diese Funktion nutzen:

%Vor%

Zum Beispiel wie oben:

%Vor%     
Kilian Batzner 20.12.2016, 10:33
quelle
2

Ich speichere jetzt die RNN-Zustände mit den tf.control_dependencies. Hier ist ein Beispiel.

%Vor%

Ich stelle nur sicher, dass ein Teil meines Graphen vom Speichern des Zustands abhängig ist.

    
chasep255 27.06.2016 12:18
quelle
2

Diese zwei Links sind auch verwandt und nützlich für diese Frage:

Ссылка Ссылка

    
verified.human 12.07.2016 09:37
quelle

Tags und Links