【问题标题】:What is a dynamic RNN in TensorFlow?TensorFlow 中的动态 RNN 是什么?
【发布时间】:2017-03-29 18:07:46
【问题描述】:

我对什么是动态 RNN(即dynamic_rnn)感到困惑。它在 TensorFlow 中返回一个输出和一个状态。这些状态和输出是什么?在 TensorFlow 中,动态 RNN 中的动态是什么?

【问题讨论】:

    标签: tensorflow recurrent-neural-network


    【解决方案1】:

    动态 RNN 允许可变序列长度。您可能有一个输入形状 (batch_size, max_sequence_length),但这将允许您在比 max_sequence_length 短的序列上运行 RNN 以获得正确的时间步数。

    相比之下,有静态 RNN,它期望运行整个固定 RNN 长度。在某些情况下,您可能更愿意这样做,例如,如果您将输入填充到 max_sequence_length

    简而言之,dynamic_rnn 通常是您想要的可变长度顺序数据。它有一个sequence_length 参数,它是你的朋友。

    【讨论】:

    • 什么是状态和输出?你能解释一下吗?
    • @xlax 一个很好的解释和输出示例可以在这里找到:stackoverflow.com/a/48239320/8236733
    • 看起来sequence_length 是一个向量,指定每个实例/批次的长度。但理想情况下,RNN 应该能够从长度推断长度(输入可以是可变长度列表/数组的列表/数组),因此您不需要指定 sequence_length。我认为 keras LSTM 可以很好地处理这个问题,但我不确定tensorflow.org/api_docs/python/tf/nn/dynamic_rnn
    【解决方案2】:

    虽然 AlexDelPiero 的答案是我在谷歌上搜索的内容,但最初的问题是不同的。您可以查看有关 LSTM 及其背后的直觉的详细描述。 LSTM 是最常见的 RNN 示例。

    http://colah.github.io/posts/2015-08-Understanding-LSTMs/

    简短的回答是:状态是从一个时间步传递到另一个时间步的内部细节。输出是每个时间步的输出张量。您通常需要将所有输出传递到下一个 RNN 层或最后一个 RNN 层的最后一个输出。要获得最后一个输出,您可以使用 output[:,-1,:]

    【讨论】:

    • 第一段和链接无法回答问题
    猜你喜欢
    • 1970-01-01
    • 2016-12-20
    • 2017-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多