在 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_lengthtf.nn.rnn 这样的东西。我也想要它,但似乎 TensorFlow 没有它。

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

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

【讨论】:

以上是关于在 Tensorflow 中生成特殊输出词后如何停止 RNN?的主要内容,如果未能解决你的问题,请参考以下文章

在Tensorflow中生成关键点热图

在shell脚本中生成必须具有特殊字符的随机字符串

如何在 Openssl 中生成十六进制输出?

如何从傅里叶输出中生成详细的频谱图?

如何使用在renderUI的selectInput中选择的选项在主面板中生成不同的输出?

Tensorboard 的 mnist 示例中生成了意外的层