什么是logits,softmax和softmax_cross_entropy_with_logits?
我正在这里浏览tensorflowAPI文档。在tensorflow文档中,他们使用了名为的关键字logits
。它是什么?API文档中的许多方法都将其编写为
tf.nn.softmax(logits, name=None)
如果写的是什么是那些logits
只Tensors
,为什么保持一个不同的名称,如logits
?
另一件事是,我无法区分两种方法。他们是
tf.nn.softmax(logits, name=None)
tf.nn.softmax_cross_entropy_with_logits(logits, labels, name=None)
它们之间有什么区别?这些文档对我来说还不清楚。我知道是什么tf.nn.softmax
呢。但是没有其他。一个例子将非常有帮助。
-
Logits只是意味着函数在较早的图层的未缩放输出上运行,并且理解单位的相对缩放是线性的。特别是,这意味着输入的总和可能不等于1,这意味着值 不是
概率(输入可能为5)。tf.nn.softmax
仅产生将softmax函数应用于输入张量的结果。softmax“压缩”输入,以便sum(input) = 1
:这是一种规范化的方法。softmax的输出形状与输入相同:它只是将值标准化。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]]
相比之下,
tf.nn.softmax_cross_entropy_with_logits
在应用softmax函数之后计算结果的交叉熵(但是以数学上更仔细的方式将其全部合并在一起)。它类似于以下结果:sm = tf.nn.softmax(x) ce = cross_entropy(sm)
交叉熵是一个汇总指标:跨元素求和。
tf.nn.softmax_cross_entropy_with_logits
形状[2,5]
张量的输出是一定形状的[2,1]
(将第一维视为批次)。如果要进行优化以最小化交叉熵 ,并且
要在最后一层之后进行软最大化,则应tf.nn.softmax_cross_entropy_with_logits
自己使用,而不是自己进行处理,因为它以数学上正确的方式涵盖了数值不稳定的拐角情况。否则,您最终会在这里和那里添加少量epsilon,从而对其进行破解。编辑于2016-02-07:
如果您具有单类标签,而一个对象只能属于一个类,则现在可以考虑使用tf.nn.sparse_softmax_cross_entropy_with_logits
,这样就不必将标签转换为密集的一键热阵列。在0.6.0版本之后添加了此功能。