在tensorflow中,有一些叫做softmax_cross_entropy_with_logits
和的方法sampled_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损失与计算softmaxed交叉熵(例如cross_entropy(softmax(train_x))
)相同
有人可以告诉我为什么有两种不同的方法,在哪种情况下我应该使用哪种方法?
如果您的目标词汇量(或者换句话说,您想要预测的类数量)非常大,那么使用常规softmax非常困难,因为您必须计算字典中每个单词的概率.通过使用 sampled_softmax_loss
您只需考虑词汇表的子集V来计算您的损失.
如果我们采样(我们的V)小于词汇量,那么采样softmax才有意义.如果您的词汇量(标签数量)很小,则没有必要使用sampled_softmax_loss
.
您可以在本文中看到实现细节:http: //arxiv.org/pdf/1412.2007v2.pdf
您还可以看到使用它的示例 - 此示例中的序列顺序转换