在Tensorflow中,采样的软最大损失和软最大交叉熵的区别是什么

2024-05-16 23:34:36 发布

您现在位置:Python中文网/ 问答频道 /正文

在tensorflow中,有称为^{}^{}的方法。

我阅读了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))

对我来说,计算软最大损耗和计算软最大交叉熵是一样的(例如cross_entropy(softmax(train_x))

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


Tags: 方法reducetftensorflowwithnnmean损耗
2条回答

如果你的目标词汇量(或者你想预测的类的数量)真的很大,那么很难使用常规的softmax,因为你必须计算字典中每个单词的概率。通过使用sampled_softmax_loss,您只需要考虑词汇表的子集V来计算您的损失。

采样的softmax只有在采样(我们的V)小于词汇表大小时才有意义。如果您的词汇表(标签数量)很小,那么使用sampled_softmax_loss是没有意义的。

您可以在本文中看到实现的详细信息: http://arxiv.org/pdf/1412.2007v2.pdf

此外,您还可以看到在这个example中使用-Sequence-to-Sequence转换的示例

取样:

抽样,在这两种情况下,都意味着你不能计算出所有可能的输出(例如:字典中的单词太多,无法在每次派生时提取所有单词,所以我们只提取几个样本,并学习关于NLP问题的知识)。

softmax_cross_entropy_with_logits

这是交叉熵,接收logit作为输入,并产生可用作损失的结果。

sampled_softmax_loss

这是一个带对数的采样软最大交叉熵,所以在使用交叉焓之前只需要几个样本,而不是使用完全交叉焓:https://github.com/tensorflow/tensorflow/blob/r1.2/tensorflow/python/ops/nn_impl.py#L1269

相关问题 更多 >