小编典典

什么是逻辑?softmax 和 softmax_cross_entropy_with_logits 有什么区别?

all

tensorflow API
文档
中,他们使用了一个名为logits.
它是什么?很多方法都是这样写的:

tf.nn.softmax(logits, name=None)

如果logits只是一个通用Tensor输入,为什么命名它logits


其次,以下两种方法有什么区别?

tf.nn.softmax(logits, name=None)
tf.nn.softmax_cross_entropy_with_logits(logits, labels, name=None)

我知道是什么tf.nn.softmax,但不知道另一个。一个例子真的很有帮助。


阅读 118

收藏
2022-03-18

共1个答案

小编典典

softmax+logits 仅仅意味着该函数对早期层的未缩放输出进行操作,并且理解单位的相对比例是线性的。特别是,这意味着输入的总和可能不等于
1,即这些值 不是 概率(您的输入可能为 5)。在内部,它首先将 softmax
应用于未缩放的输出,然后计算这些值的交叉熵与它们“应该”由标签定义的值。

tf.nn.softmax产生将softmax
函数
应用于输入张量的结果。softmax“挤压”输入sum(input) = 1,它通过将输入解释为对数概率(logits)然后将它们转换回 0 到 1 之间的原始概率来进行映射。softmax 的输出形状与输入:

a = tf.constant(np.array([[.1, .3, .5, .9]]))
print s.run(tf.nn.softmax(a))
[[ 0.16838508  0.205666    0.25120102  0.37474789]]

有关为什么在 DNN 中广泛使用 softmax
的更多信息,请参阅此答案。

tf.nn.softmax_cross_entropy_with_logits在应用 softmax 函数后,将 softmax
步骤与交叉熵损失的计算相结合,但它以更数学上更谨慎的方式一起完成。它类似于以下结果:

sm = tf.nn.softmax(x)
ce = cross_entropy(sm)

交叉熵是一个汇总度量:它对元素求和。tf.nn.softmax_cross_entropy_with_logits一个形状[2,5]张量的输出是有形状的[2,1](第一个维度被视为批次)。

如果您想进行优化以最小化交叉熵 并且
在最后一层之后进行softmaxing,则应该使用tf.nn.softmax_cross_entropy_with_logits而不是自己做,因为它以数学上正确的方式涵盖了数值不稳定的极端情况。否则,你最终会通过在这里和那里添加小epsilons来破解它。

2016-02-07 编辑:
如果您有单类标签,其中一个对象只能属于一个类,您现在可以考虑使用tf.nn.sparse_softmax_cross_entropy_with_logits,这样您就不必将标签转换为密集的
one-hot 数组。此功能是在 0.6.0 版本之后添加的。

2022-03-18