在Tensorflow中,sampled_softmax_loss和softmax_cross_entropy_with_logits有什么区别?

在Tensorflow中,有两种方法被称为softmax_cross_entropy_with_logitssampled_softmax_loss

我阅读了Tensorflow的文档,并在谷歌上搜索了更多信息,但没有找到它们的区别。在我看来,这两种方法似乎都是使用softmax函数来计算损失的。

使用sampled_softmax_loss计算损失

loss = tf.reduce_mean(tf.nn.sampled_softmax_loss(...))

使用softmax_cross_entropy_with_logits计算损失

loss = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(P, Q))

对我来说,计算softmax损失与计算softmax后的交叉熵是相同的(例如,cross_entropy(softmax(train_x)))。

能否有人告诉我为什么有两种不同的方法,以及在什么情况下应该使用哪种方法?


回答:

如果你的目标词汇量(换句话说,你想要预测的类别数量)非常大,使用常规的softmax会非常困难,因为你必须为字典中的每个词计算概率。通过使用sampled_softmax_loss,你只需要考虑词汇的一个子集V来计算损失。

采样softmax只有在我们采样的V小于词汇量时才有意义。如果你的词汇量(标签数量)较小,就没有必要使用sampled_softmax_loss

你可以在这篇论文中看到实现细节。

你还可以查看使用它的示例 – 序列到序列翻译,在这个示例中。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注