在 Tensorflow 中,sampled_softmax_loss 和 softmax_cross_entropy_with_logits 有什么区别
In Tensorflow, what is the difference between sampled_softmax_loss and softmax_cross_entropy_with_logits
在tensorflow中,有方法叫做softmax_cross_entropy_with_logits
and 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 来计算损失。
采样的 softmax 只有在我们采样(我们的 V)小于词汇量时才有意义。如果你的词汇量(标签数量)很小,那么使用 sampled_softmax_loss
.
是没有意义的
您可以在本文中查看实现细节:
http://arxiv.org/pdf/1412.2007v2.pdf
您还可以看到使用它的示例 - 在此 example
中的序列到序列翻译
采样:
抽样,在这两种情况下都意味着您不会计算所有可能的输出(例如:如果字典中的单词太多而无法在每次推导时全部使用,所以我们只使用一些样本并从中学习 NLP 问题)。
softmax_cross_entropy_with_logits
:
这是交叉熵,接收 logits 作为输入并产生可用作损失的值。
sampled_softmax_loss
:
这是一个采样 softmax_cross_entropy_with_logits,因此在使用交叉熵之前只需要几个样本,而不是使用完整的交叉熵:https://github.com/tensorflow/tensorflow/blob/r1.2/tensorflow/python/ops/nn_impl.py#L1269
在tensorflow中,有方法叫做softmax_cross_entropy_with_logits
and 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 来计算损失。
采样的 softmax 只有在我们采样(我们的 V)小于词汇量时才有意义。如果你的词汇量(标签数量)很小,那么使用 sampled_softmax_loss
.
您可以在本文中查看实现细节: http://arxiv.org/pdf/1412.2007v2.pdf
您还可以看到使用它的示例 - 在此 example
中的序列到序列翻译采样:
抽样,在这两种情况下都意味着您不会计算所有可能的输出(例如:如果字典中的单词太多而无法在每次推导时全部使用,所以我们只使用一些样本并从中学习 NLP 问题)。
softmax_cross_entropy_with_logits
:
这是交叉熵,接收 logits 作为输入并产生可用作损失的值。
sampled_softmax_loss
:
这是一个采样 softmax_cross_entropy_with_logits,因此在使用交叉熵之前只需要几个样本,而不是使用完整的交叉熵:https://github.com/tensorflow/tensorflow/blob/r1.2/tensorflow/python/ops/nn_impl.py#L1269