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?
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:
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.
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%Tags und Links python tensorflow