我查阅了许多教程、博客、指南以及Tensorflow的官方文档来理解这个问题。例如,请看下面的代码行:
lstm = tf.nn.rnn_cell.LSTMCell(512)output, state_tuple = lstm(current_input, last_state_tuple)
现在如果我解包状态,
last_cell_memory, last_hidden_state = state_tuple
output和last_hidden_state的维度完全相同,都是[batch_size, 512]。它们可以互换使用吗?我是说,我可以这样做吗?:
last_state_tuple= last_cell_memory, output
然后将last_state_tuple馈送到lstm中?
回答:
@的人的回答是正确的,但它没有提到一个重要点:LSTM层的状态几乎总是等于输出。当LSTM单元链很长且并非所有输入序列长度相等(因此需要填充)时,这种区别就变得重要了。那时你就应该区分状态和输出。
请查看我在一个类似问题上的答案中的可运行示例(它使用BasicRNNCell
,但使用LSTMCell
也会得到相同的结果)。