无法实现多个堆叠的双向RNN

时间:2018-11-21 00:03:06

标签: python-3.x tensorflow

我正在尝试在Tensorflow中实现Seq2Seq变体,其中包括两个编码器和一个解码器。对于编码器的第一层,我有双向LSTM。因此,我实现了这种方法,以获取可变数量层的双向LSTM:

def bidirectional_lstm(batch, num_layers=2, hidden_layer=256):


forward_lstms=[LSTMCell(num_units=hidden_layer/2) for _ in range(num_layers)]
backward_lstms=[LSTMCell(num_units=hidden_layer/2) for _ in range(num_layers)]

states_fw=[f_l.zero_state(BATCH_SIZE, tf.float64) for f_l in forward_lstms]
states_bw=[b_l.zero_state(BATCH_SIZE, tf.float64) for b_l in backward_lstms]


outputs, final_state_fw, final_state_bw=tf.contrib.rnn.stack_bidirectional_dynamic_rnn(
    forward_lstms,
    backward_lstms,
    batch,
    initial_states_fw=states_fw,
    initial_states_bw=states_bw,
    parallel_iterations=32
)

return outputs

但是当我运行下面的行时:

a=bidirectional_lstm(a_placeholder)

b=bidirectional_lstm(b_placeholder, num_layers=1)

我收到此错误消息:

ValueError
Variable 
stack_bidirectional_rnn/cell_0/bidirectional_rnn/fw/lstm_cell/kernel 
already exists, disallowed. Did you mean to set reuse=True or 
reuse=tf.AUTO_REUSE in VarScope? Originally defined at:    File 
"/usr/local/lib/python3.6/dist- 
packages/tensorflow/contrib/rnn/python/ops/rnn.py", line 233, in 
stack_bidirectional_dynamic_rnn     time_major=time_major)

我不想“重用”给定的堆叠式双向LSTM。如何运行包含两个堆叠的双向LSTM的两个单独的编码器?

1 个答案:

答案 0 :(得分:0)

弄清楚了:两种编码器需要在两个不同的变量范围内“运行”,以避免在梯度更新期间发生“混合”

Root_List = []
list1 = [1, 2, 3]
Root_List.append(list1)
list2 = [1, 5, 9]
Root_List.append(list2)
list3 = [2, 4, 1]
Root_List.append(list3)