Für RNNs Insbesondere gibt es zwei Möglichkeiten: tf.nn.rnn
und tf.nn.dynamic_rnn
. Keiner erstellt oder zerstört Grafiken vorübergehend.
Die erste Funktion erzeugt T
Subgraphen, in dem T
die Länge der Liste der Python Eingänge Sie liefern (das heißt, ist ein Len Eingänge T
Python Liste der Form [batch, depth]
Tensoren). tf.nn.rnn
erwartet immer eine feste Anzahl von Zeitschritten. Hinweis: Sie können steuern, welche Untergraphen für einen bestimmten Schritt ausgeführt werden, indem Sie den Parameter sequence_length
übergeben; Die Funktion verwendet dann eine bedingte Auswertung (tf.cond
), um festzustellen, welche Operationen ausgeführt werden.
Im Gegensatz dazu verwendet dynamic_rnn
eine spezielle TensorFlow while-Schleife und andere Tricks, die eine begrenzte Art von Schleife in der Graphenstruktur einführt. In diesem Fall gibt es genau einen Untergraphen für den "Zeitschritt" und er wird immer wieder durchlaufen, bis Ihre Eingabe verarbeitet wurde. In diesem Fall ist die Eingabe ein 3D
Tensor mit den Abmessungen [batch, time, depth]
(es [time, batch, depth]
sein kann, wenn Sie time_major=True
gesetzt); und die ersten zwei Dimensionen können von Schritt zu Schritt variieren.