Tensorflow r.1.1 中的 TrainingHelper 和 GreedyEmbeddingHelper 有啥区别(预测结果不同)?

Posted

技术标签:

【中文标题】Tensorflow r.1.1 中的 TrainingHelper 和 GreedyEmbeddingHelper 有啥区别(预测结果不同)?【英文标题】:Is there any difference between TrainingHelper and GreedyEmbeddingHelper in Tensorflow r.1.1(predict result different)?Tensorflow r.1.1 中的 TrainingHelper 和 GreedyEmbeddingHelper 有什么区别(预测结果不同)? 【发布时间】:2017-11-25 04:40:10 【问题描述】:

我是张量流的初学者。 我想通过this tutorial来研究tensorflow。

阅读本教程后,我想使用我的数据运行此代码(用于标记的韩国标题) 在训练模型中(使用TrainingHelper),预测结果似乎还可以。 但是在推理模型中(使用GreedyEmbeddingHelper),预测结果非常糟糕(即使使用训练数据)。它看起来像第一个 epoch 的训练模型预测。 TrainingHelperGreedyEmbeddingHelper有区别吗?

我认为教程和我的代码之间的区别只是超参数。

【问题讨论】:

【参考方案1】:

TrainingHelper 用于训练时,当解码器 RNN 的(其中一个)输入是上一个时间步的基本事实时。由于在推理时不提供基本事实,因此您需要输入前一个时间步的解码器输出。

例如,考虑目标句子“我喜欢披萨”。在训练时,解码“pizza”这个词时,解码的RNN会收到以下输入:

    上一个时间步的基本事实,例如“like”一词的嵌入(使用目标嵌入)。 上一个时间步的上下文。 上一个时间步的隐藏状态。

在推理时,解码 RNN 仍将接收 2 和 3。但是,它不会采用地面实况,而是采用前一个时间步长的解码器输出(单热编码等于目标词汇的长度,例如您的解码器在上一个时间步猜到的单词),通过目标嵌入运行它,并将其用作输入。

【讨论】:

感谢您的友好解释和示例。据我了解您的解释,我认为我需要更多的学习数据或训练时间来预测下一个正确的单词。非常感谢^^ 抱歉删除了这个。对于特定情况,是否可以使用 GreedyDecoder 而不是 TrainingHelper?我意识到训练会变慢……这可行吗?见:***.com/questions/48256372/…【参考方案2】:

Tensorflow summit talk 中的第 28 分钟为辅助类提供了一些颜色。正如布赖恩的回答中提到的 - GreedyEmbeddingHelper 用于预测时间,当基本事实不可用作输入时。但是你也可以看看 ScheduledEmbeddingTrainingHelper,如果你在训练时想要一个更细致入微的助手

【讨论】:

以上是关于Tensorflow r.1.1 中的 TrainingHelper 和 GreedyEmbeddingHelper 有啥区别(预测结果不同)?的主要内容,如果未能解决你的问题,请参考以下文章

Tensorflow:模型训练tensorflow.train

tensorflow中 tf.train.slice_input_producer 和 tf.train.batch 函数(转)

tensorflow数据读取机制tf.train.slice_input_producer 和 tf.train.batch 函数

tensorflow:batch and shuffle_batch

Tensorflow tf.train.Saver 不保存所有变量

TensorFlow优化器浅析