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?
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
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
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. –