0
トランケートバックプロパゲーションを適用するために、バッチで計算されたfinal_stateを次のバッチに転送します。私はプレースホルダを介して状態を取得していますが、その型は異なり、初期状態として直接渡すことはできません。私はこの操作をしたい。私はテンソルフローの初心者です。私はこの操作に助けが必要です。要するにtf.nn.bidirectional_dynamic_rnnを使用してトレーニング中にバッチ間で状態を渡す方法は?
#starting of LSTM
def lstm_cell_f() :
return tf.contrib.rnn.BasicLSTMCell(size,reuse=tf.get_variable_scope().reuse)
def lstm_cell_b() :
return tf.contrib.rnn.BasicLSTMCell(size, reuse=tf.get_variable_scope().reuse)
cell_f = tf.contrib.rnn.MultiRNNCell([lstm_cell_f() for _ in range(num_layers)])
cell_b = tf.contrib.rnn.MultiRNNCell([lstm_cell_b() for _ in range(num_layers)])
initial_state_f = cell_f.zero_state(batch_size, dtype = tf.float32)
initial_state_b = cell_b.zero_state(batch_size, dtype = tf.float32)
def RNN_OUT(da,state_f, state_b) :
outputs, states = tf.nn.bidirectional_dynamic_rnn(cell_f,cell_b, da, initial_state_fw=initial_state_f, initial_state_bw=initial_state_b, swap_memory=True)
return states, tf.concat(outputs, 2)
i_state_f = tf.placeholder(tf.float32, None, name="i_state_f")
i_state_b = tf.placeholder(tf.float32, None, name="i_state_b")
_input = tf.placeholder(tf.float32, shape = [batch_size, num_steps, size], name="input")
final_states, _output = RNN_OUT(_input, i_state_f, i_state_b)
、私はプレースホルダを使用してバックfinal_statesを送信して、両方の前方と後方lstmsのinitial_statesのためにそれを使用したい...