【发布时间】:2017-03-29 18:07:46
【问题描述】:
我对什么是动态 RNN(即dynamic_rnn)感到困惑。它在 TensorFlow 中返回一个输出和一个状态。这些状态和输出是什么?在 TensorFlow 中,动态 RNN 中的动态是什么?
【问题讨论】:
标签: tensorflow recurrent-neural-network
我对什么是动态 RNN(即dynamic_rnn)感到困惑。它在 TensorFlow 中返回一个输出和一个状态。这些状态和输出是什么?在 TensorFlow 中,动态 RNN 中的动态是什么?
【问题讨论】:
标签: tensorflow recurrent-neural-network
动态 RNN 允许可变序列长度。您可能有一个输入形状 (batch_size, max_sequence_length),但这将允许您在比 max_sequence_length 短的序列上运行 RNN 以获得正确的时间步数。
相比之下,有静态 RNN,它期望运行整个固定 RNN 长度。在某些情况下,您可能更愿意这样做,例如,如果您将输入填充到 max_sequence_length。
简而言之,dynamic_rnn 通常是您想要的可变长度顺序数据。它有一个sequence_length 参数,它是你的朋友。
【讨论】:
sequence_length 是一个向量,指定每个实例/批次的长度。但理想情况下,RNN 应该能够从长度推断长度(输入可以是可变长度列表/数组的列表/数组),因此您不需要指定 sequence_length。我认为 keras LSTM 可以很好地处理这个问题,但我不确定tensorflow.org/api_docs/python/tf/nn/dynamic_rnn。
虽然 AlexDelPiero 的答案是我在谷歌上搜索的内容,但最初的问题是不同的。您可以查看有关 LSTM 及其背后的直觉的详细描述。 LSTM 是最常见的 RNN 示例。
http://colah.github.io/posts/2015-08-Understanding-LSTMs/
简短的回答是:状态是从一个时间步传递到另一个时间步的内部细节。输出是每个时间步的输出张量。您通常需要将所有输出传递到下一个 RNN 层或最后一个 RNN 层的最后一个输出。要获得最后一个输出,您可以使用 output[:,-1,:]
【讨论】: