2017-09-03 2 views
0

Ich verwende tf.nn.dynamic_rnn, um eine LSTM in Tensorflow auszuführen. Ich habe einen Tensor von N Anfangszustandsvektoren und einen Tensor von M = N * n Eingaben. Jede Serie besteht aus n Eingabeelementen, und ich mag den i-ten Satz von Eingangsvektoren mit dem i-ten Ausgangszustandsvektor bewerten, wie unten dargestellt:LSTM Anfangszustand für jeden Artikel in der Charge in Tensorflow

inputs[0:n], initial_states[0] 
inputs[n:2*n], initial_states[1] 
... 

Gibt es eine Möglichkeit, es mit einem zu tun Einzelruf tf.nn.dynamic_rnn und die oben genannten Tensoren direkt, oder muss ich für jeden Ausgangszustandsvektor und seine entsprechenden Eingänge auf eine Schleife zurückgreifen (was zu len(initial_states) Aufrufen zu tf.nn.dynamic_rnn führt)?

+1

Ist das nicht nur normale Dosierung? Ihr initialer [initial_state] (https://www.tensorflow.org/api_docs/python/tf/nn/dynamic_rnn) würde also eine Batch-Dimension über "N" haben, und der RNN würde für diese Stapel "n" Schritte ausführen . Sie müssen "Eingänge" nur umformen, um "[N, n]" zu sein. Oder hatten Sie etwas anderes vor? –

+0

Ich ... wusste das nicht, danke. Bitte geben Sie diese Antwort in einer Antwort an, damit ich sie akzeptieren kann. – npit

Antwort

1

(ein bisschen Detail aus den Kommentaren zu der Frage Hinzufügen)

Diese Art der Dosierung gut unterstützt wird, und ist in der Regel notwendig, um gute Leistung zu erzielen. Ihr initial_state wird eine Batch-Dimension über N haben, und der RNN wird für n Schritte auf diesen Batches ausgeführt. Sie müssen nur die Eingänge zu [N, n, ...] umformen (mit time_major=False, dem Standardwert).

Es wird schwieriger, wenn Sie Eingänge variabler Länge haben, die zusammengebündelt werden müssen. Etwas wie SequenceQueueingStateSaver kann da helfen.

Verwandte Themen