Ist RNN ursprünglichen Zustand zurücksetzen für nachfolgende mini-batches?
Könnte jemand bitte klären, ob der anfängliche Zustand des RNN in TF-reset für nachfolgende mini-batches, oder der Letzte Zustand der früheren mini-batch verwendet wird, wie erwähnt, in Ilja Sutskever et al., ICLR 2015 ?
InformationsquelleAutor VM_AI | 2016-07-18
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den
tf.nn.dynamic_rnn()
odertf.nn.rnn()
Vorgänge ermöglichen, geben Sie den ursprünglichen Zustand des RNN mit derinitial_state
parameter. Wenn Sie diesen parameter nicht angeben, wird die verborgene Staaten werden mit null initialisiert Vektoren am Anfang jeder batch-training.In TensorFlow, können Sie wrap-Tensoren in
tf.Variable()
zu halten, Ihre Werte in der Grafik zwischen mehreren Sitzung ausgeführt wird. So stellen Sie sicher, markieren Sie Sie als nicht trainierbar, weil die Optimierer optimieren alle trainierbar Variablen standardmäßig.Habe ich noch nicht getestet mit diesem code, aber es sollte Ihnen einen Hinweis in die richtige Richtung. Es gibt auch eine
tf.nn.state_saving_rnn()
, können Sie eine state-saver-Objekt, aber ich habe es nicht verwenden yet.tf.Variable
erstellt wird einen Fehler auslösen, denn wir müssen festlegen, die Größe der Variablen.InformationsquelleAutor danijar
Zusätzlich zu danijar ' s Antwort, hier ist der code für eine LSTM, deren Zustand ist ein Tupel (
state_is_tuple=True
). Es unterstützt auch mehrere Schichten.Definieren wir zwei Funktionen - eine für das erhalten der Variablen mit einer anfänglichen Nullpunkt und eine Funktion für die Rückgabe einer operation, die wir weitergeben können, um
session.run
um ein update auf die state-Variablen mit dem LSTM letzten ausgeblendeten Zustand.Ähnlich wie danijar Antwort, die wir verwenden können, die zur Aktualisierung der LSTM ist-Zustand nach jedem batch:
Der Hauptunterschied ist, dass
state_is_tuple=True
macht der LSTM ist-Zustand eine LSTMStateTuple mit zwei Variablen (Zelle Stand und versteckte Staat), anstatt nur eine einzelne variable. Mit mehreren Ebenen macht dann die LSTM Zustand ein Tupel von LSTMStateTuples - einer pro Schicht.Was tun, wenn die batch_size ist bestimmt während der Laufzeit?
danke für den Hinweis, ich aktualisierte den code.
Sie können geben get_state_variables die maximale batch_size, die Sie erwarten, zu erstellen, die den Zustand von Variablen und ignorieren Sie die unbenutzte Variablen
InformationsquelleAutor Kilian Batzner