在 Tensorflow 中生成特殊输出词后如何停止 RNN?
Posted
技术标签:
【中文标题】在 Tensorflow 中生成特殊输出词后如何停止 RNN?【英文标题】:How can I stop RNN after generating a special output word in Tensorflow? 【发布时间】:2016-05-10 21:55:21 【问题描述】:我想为序列到序列的学习实现一个编码器-解码器模型。
编码器逐字读取输入序列并更新其隐藏状态。
解码器使用编码器的隐藏状态来初始化其隐藏状态。然后根据最后生成的输出 (y(t-1)) 及其隐藏状态生成输出。我想在生成特殊输出 () 时停止此过程。事实上,我希望能够生成不同长度的输出。我如何在 TensorFlow 中做到这一点?
【问题讨论】:
TensorFlow中有sequence-to-sequence模型的教程,看一下。 https://www.tensorflow.org/versions/master/tutorials/seq2seq/index.html 我读过那个代码。但是,它不会在生成特殊输出时停止。实际上,它将实例划分为桶,并根据每个桶的输出大小生成输出。换句话说,如果它生成了一个特殊的输出,它并不是一种停止生成输出的方法。 【参考方案1】:我想你想要像 sequence_length
或 tf.nn.rnn
这样的东西。我也想要它,但似乎 TensorFlow 没有它。
到目前为止,我一直在做的并找到解决此限制的好方法是在训练时使用 EOS 符号填充解码器标签。通常,您只需要其中一个,但填充其中很多并不会造成任何伤害。
在执行时,您可以手动控制每次迭代以在第一个 EOS 生成时停止,或者只运行预定义数量的时间步,然后从输出中删除额外的 EOS 符号。解码器很快就知道,在第一个 EOS 之后,可能只会有更多的 EOS。
【讨论】:
以上是关于在 Tensorflow 中生成特殊输出词后如何停止 RNN?的主要内容,如果未能解决你的问题,请参考以下文章