我正在尝试在TensorFlow网站上关注Language Modeling的教程。我看到它运行,成本下降,它工作得很好,但我没有看到任何方法实际从模型中获得预测。我尝试按照this answer的说明操作,但是从session.run返回的张量是浮点值,如0.017842259,字典将字映射到整数,这样就不起作用了。
如何从张量流模型中获得预测的单词?
编辑:我在搜索后找到了这个explanation,我只是不确定在这个例子的上下文中x和y是什么。他们似乎没有像在解释中那样使用与此示例相同的约定。
答案 0 :(得分:1)
您提到的张量是loss
,它定义了网络的培训方式。对于预测,您需要访问包含下一个单词概率的张量probabilities
。如果这是分类问题,您只需argmax
即可获得最高概率。但是,为了给较低概率的单词生成一个机会,经常使用某种样本。
编辑:我假设您使用的代码是this。在这种情况下,如果您查看第148行(logits
),可以通过简单地将softmax
函数应用于其中来转换为概率 - 如tensorflow网站中的伪代码所示。希望这会有所帮助。
答案 1 :(得分:0)
因此,经过一系列其他类似的帖子,我发现了这一点。首先,文档中解释的代码与GitHub存储库中的代码不同。当前代码的工作原理是使用内部数据初始化模型,而不是将数据传递给模型。
所以基本上要完成我想要做的事情,我将我的代码恢复为提交9274f5a(对于reader.py也是如此)。然后,我按照this post中的步骤操作,以获得probabilities
函数中的run_epoch
张量。另外,我按照this answer将vocabulary
传递给我的main
函数。从那里开始,我使用vocabulary = {v: k for k, v in vocabulary.items()}
将dict反转并将其传递给run_epoch
。
最后,我们可以通过运行run_epoch
在current_word = vocabulary[np.argmax(prob, 1)]
中获取预测的字词,其中prob
是从session.run()
返回的张量
编辑:恢复代码不应该是一个永久的解决方案,我绝对建议使用上面的@Prophecies答案来获得probabilities
张量。但是,如果你想获得单词映射,你需要像我在这里那样传递词汇。