Ich kann die Ausgabe von tf.nn.dynamic_rnn
tensorflow-Funktion nicht verstehen. Das Dokument sagt nur über die Größe der Ausgabe aus, aber es sagt nicht, was jede Zeile / Spalte bedeutet. Aus der Dokumentation:
Ausgaben : Die RNN-Ausgabe
Tensor
.Wenn time_major == False (Standard), ist dies ein
Tensor
shaped:[batch_size, max_time, cell.output_size]
.Wenn time_major == True, ist dies ein
Tensor
shaped:[max_time, batch_size, cell.output_size]
.Beachten Sie, wenn
cell.output_size
ein (möglicherweise verschachteltes) Tupel von ganzen Zahlen ist oderTensorShape
Objekte, dann wirdoutputs
ein Tupel mit dem
sein gleiche Struktur wiecell.output_size
, enthält Tensoren mit Shapes entsprechend den Formdaten incell.output_size
.state : Der Endstatus. Wenn
cell.state_size
ein int ist, wird dies sei geformt[batch_size, cell.state_size]
. Wenn es sich um ein
TensorShape
handelt, wird dies[batch_size] + cell.state_size
geprägt.
Wenn es ein (möglicherweise verschachteltes) Tupel von Ints oderTensorShape
ist, wird dies der Fall sein Sei ein Tupel mit den entsprechenden Formen.
Der outputs
Tensor ist eine 3-D Matrix, aber was repräsentiert jede Zeile / Spalte?
tf.dynamic_rnn
bietet zwei Ausgaben, outputs
und state
.
outputs
enthält die Ausgabe der RNN-Zelle zu jedem Zeitpunkt. Nimmt man den Standardwert time_major == False
an, nehmen wir an, dass Sie eine Eingabe aus 10 Beispielen mit jeweils 7 Zeitschritten und einem Merkmalsvektor der Größe 5 für jeden Zeitschritt haben. Dann wäre Ihre Eingabe 10x7x5 ( batch_size
x max_time
x features
). Jetzt geben Sie dies als eine Eingabe für eine RNN-Zelle mit Ausgabegröße 15. Konzeptionell wird jeder Zeitschritt jedes Beispiels in die RNN eingegeben, und Sie würden einen 15-langen Vektor für jede davon erhalten. Also das ist, was outputs
enthält, ein Tensor in diesem Fall der Größe 10x7x15 ( batch_size
x max_time
x cell.output_size
) mit der Ausgabe der RNN-Zelle bei jedem Zeitschritt. Wenn Sie nur an der letzten Ausgabe der Zelle interessiert sind, können Sie einfach die Zeitdimension aufteilen, um nur das letzte Element auszuwählen (z. B. outputs[:, -1, :]
). state
enthält den Zustand des RNN nach der Verarbeitung aller Eingaben. Beachten Sie, dass im Gegensatz zu outputs
nicht zu jedem Zeitschritt Informationen enthalten sind, sondern nur zum letzten (dh zum Status nach dem letzten). Abhängig von Ihrem Fall kann der Zustand nützlich sein oder auch nicht. Wenn Sie beispielsweise sehr lange Sequenzen haben, möchten / wollen Sie möglicherweise nicht, dass Sie sie in einem einzigen Stapel verarbeiten können, und Sie müssen sie möglicherweise in mehrere Untersequenzen aufteilen. Wenn Sie state
ignorieren, wird es immer so, als ob Sie eine neue Subsequenz eingeben, als würden Sie eine neue Subsequenz erstellen. Wenn Sie sich jedoch an den Zustand erinnern (z. B. ihn ausgeben oder in einer Variablen speichern), können Sie ihn später zurückgeben (über den Parameter initial_state
von tf.nn.dynamic_rnn
), um den Zustand des RNN korrekt zu verfolgen. und setze es nur auf den Anfangszustand (im Allgemeinen nur Nullen) zurück, nachdem du die ganzen Sequenzen abgeschlossen hast. Die Form von state
kann abhängig von der von Ihnen verwendeten RNN-Zelle variieren, im Allgemeinen haben Sie jedoch für jedes Beispiel einen Zustand (einen oder mehrere Tensoren mit der Größe batch_size
x state_size
, wobei state_size
hängt vom Zelltyp und von der Größe ab). Tags und Links tensorflow