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

标签 python machine-learning deep-learning tensorflow

在tensorflow中,有一种叫做softmax_cross_entropy_with_logits的方法和 sampled_softmax_loss .

我阅读了 tensorflow 文档并在 google 上搜索了更多信息,但我找不到不同之处。在我看来,两者都使用 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 即可计算损失。

仅当我们采样(我们的 V)小于词汇量时,采样的 softmax 才有意义。如果您的词汇量(标签数量)很小,则使用 sampled_softmax_loss 没有意义。

您可以在本文中查看实现细节: http://arxiv.org/pdf/1412.2007v2.pdf

您还可以看到使用它的示例 - 在此 example 中的序列到序列翻译

关于python - 在Tensorflow中,sampled_softmax_loss和softmax_cross_entropy_with_logits有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35241251/

相关文章:

python - 如何使用派生自 Python 列表类的类

Python/Webdriver : how do I add browser binaries to path when I do not have admin rights?

machine-learning - scikit learn 对停用词进行分类

machine-learning - 了解 Faster rcnn

tensorflow - TensorFlow 中 dropout 层位于密集层之前还是之后?

python - Keras LocallyConnected1D 层

python - Django 的双下划线

machine-learning - 具有 3D 卷积层的变分自编码器交叉熵损失 (xent_loss)

python - 神经网络中的未知错误。是因为矩阵不可交换吗?

python - 将 Dataframe 列中的值除以同一列中的前一个值