【问题标题】:How can I stop RNN after generating a special output word in Tensorflow?在 Tensorflow 中生成特殊输出词后如何停止 RNN?
【发布时间】:2016-05-10 21:55:21
【问题描述】:

我想为序列到序列的学习实现一个编码器-解码器模型。

编码器逐字读取输入序列并更新其隐藏状态。

解码器使用编码器的隐藏状态来初始化其隐藏状态。然后根据最后生成的输出 (y(t-1)) 及其隐藏状态生成输出。我想在生成特殊输出 () 时停止此过程。事实上,我希望能够生成不同长度的输出。我如何在 TensorFlow 中做到这一点?

【问题讨论】:

  • TensorFlow中有sequence-to-sequence模型的教程,看一下。 https://www.tensorflow.org/versions/master/tutorials/seq2seq/index.html
  • 我读过那个代码。但是,它不会在生成特殊输出时停止。实际上,它将实例划分为桶,并根据每个桶的输出大小生成输出。换句话说,如果它生成了一个特殊的输出,它并不是一种停止生成输出的方法。

标签: tensorflow recurrent-neural-network


【解决方案1】:

我想你想要像 sequence_length 或 tf.nn.rnn 这样的东西。我也想要它,但似乎 TensorFlow 没有它。

到目前为止,我一直在做的并找到解决此限制的好方法是在训练时使用 EOS 符号填充解码器标签。通常,您只需要其中一个,但填充其中很多并不会造成任何伤害。

在执行时,您可以手动控制每次迭代以在第一个 EOS 生成时停止,或者只运行预定义数量的时间步,然后从输出中删除额外的 EOS 符号。解码器很快就知道,在第一个 EOS 之后,可能只会有更多的 EOS。

【讨论】:

    猜你喜欢
    • 2016-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-20
    相关资源
    最近更新 更多