我在TensorFlow中实现了堆叠LSTM网络,使用:
# Stack up multiple LSTM layers
cell = tf.contrib.rnn.MultiRNNCell([lstm_layer() for _ in range(lstm_layers)])
其中lstm_layer()
定义为:
def lstm_layer():
return tf.contrib.rnn.BasicLSTMCell(lstm_size, state_is_tuple=True)
我使用批量大小为20,序列长度为200. 200是最大值,其余用零填充。我使用dynamic_rnn,我为每个样本传递序列长度:
outputs, final_state = tf.nn.dynamic_rnn(cell,
embed,
sequence_length=seq_lengths,
initial_state=initial_state)
当我使用outputs[:,-1,:]
查看最后一个输出时,h
向量的形状为(2, batch_size, cell.output_size)
,其中cell.output_size
只是顶部LSTM图层中的单位数(在我的情况下,128,等于lstm_size
)。
2来自哪里?根据我的理解,我应该为批次中的每个样本提供128个输出,而不是该数量的2倍。
提前致谢。