我正在尝试在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的两个单独的编码器?
答案 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)