我对动态RNN(即 dynamic_rnn )是什么感到困惑 . 它在TensorFlow中返回 output 和 state . 这些状态和输出是什么?在TensorFlow中,动态RNN中的动态是什么?
dynamic_rnn
动态RNN允许可变序列长度 . 您可能具有输入形状 (batch_size, max_sequence_length) ,但这将允许您在比 max_sequence_length 短的序列上运行RNN正确的时间步长 .
(batch_size, max_sequence_length)
max_sequence_length
相反,存在静态RNN,其期望运行整个固定RNN长度 . 在某些情况下,您可能更愿意这样做,例如,无论如何您将输入填充到 max_sequence_length .
简而言之, dynamic_rnn 通常是您想要的可变长度顺序数据 . 它有一个 sequence_length 参数,它是你的朋友 .
sequence_length
虽然AlexDelPiero的回答是我在Google上搜索的,但最初的问题却与众不同 . 您可以查看有关LSTM及其背后的直觉的详细说明 . LSTM是RNN最常见的例子 .
http://colah.github.io/posts/2015-08-Understanding-LSTMs/
简短的回答是:状态是从一个时间步到另一个时间步的内部细节 . 输出是每个时间步长的输出张量 . 您通常需要将所有输出传递到下一个RNN层或最后一个RNN层的最后一个输出 . 要获得最后一个输出,您可以使用输出[:, - 1,:]
2 回答
动态RNN允许可变序列长度 . 您可能具有输入形状
(batch_size, max_sequence_length)
,但这将允许您在比max_sequence_length
短的序列上运行RNN正确的时间步长 .相反,存在静态RNN,其期望运行整个固定RNN长度 . 在某些情况下,您可能更愿意这样做,例如,无论如何您将输入填充到
max_sequence_length
.简而言之,
dynamic_rnn
通常是您想要的可变长度顺序数据 . 它有一个sequence_length
参数,它是你的朋友 .虽然AlexDelPiero的回答是我在Google上搜索的,但最初的问题却与众不同 . 您可以查看有关LSTM及其背后的直觉的详细说明 . LSTM是RNN最常见的例子 .
http://colah.github.io/posts/2015-08-Understanding-LSTMs/
简短的回答是:状态是从一个时间步到另一个时间步的内部细节 . 输出是每个时间步长的输出张量 . 您通常需要将所有输出传递到下一个RNN层或最后一个RNN层的最后一个输出 . 要获得最后一个输出,您可以使用输出[:, - 1,:]