2016-10-21 2 views
4

Wenn dynamic_rnn verwendet wird, ist ein Parameter namens initial_state erforderlich. Eine einfache Lösung istWie setze ich den Anfangszustand von rnn als Parameter im Tensorflow?

initial_state = lstm_cell.zero_state(batch_size, tf.float32) 

Aber ich möchte den Ausgangszustand als Parameter, der optimiert werden kann, wie soll ich tun?

Ich kann zwei Trainable_Variablen namens h0 und c0 definieren, die zwei Vektoren sind. Aber dynamic_rnn erfordert zwei Matrizen, wobei die erste Dimension batch_size ist. Wie könnte ich den Vektor h0 zu einer Matrix erweitern, deren jede Zeile h0 ist?

Antwort

3

Was ist, wenn Sie so etwas gemacht haben?

initial_state_vector = tf.get_variable('initial_state_vector', [1, state_size]) 
initial_state = tf.tile(initial_state_vector, batch_size) 

Dann können Sie die initial_state Variable auf den LSTM liefern und es wird die richtige Größe sein.

+0

Es ist mir aus der Dokumentation nicht klar, dass 'tf.tile' alle Werte miteinander verknüpft hält (um sicherzustellen, dass Sie nur 'state_size' viele Werte anstelle von' batch_size * state_size' viele Werte lernen). Weißt du, ob das der Fall ist? – kbrose

+1

Ja. Wenn Sie einen Vektor kacheln, werden alle diese Gewichte miteinander verbunden. Ich habe den Code in meiner Antwort nicht getestet, so dass ich vielleicht etwas falsch verstanden habe, aber diese grundlegende Strategie sollte funktionieren. – Aaron

+0

Eigentlich sollte es initial_state = tf.tile(initial_state_vector, [batch_size, 1]) sein Der zweite Parameter von tf.tile sollte eine Liste oder ein Tensor sein, wobei jedes Element jede Dimension von initial_state_vector kachelt. –

Verwandte Themen