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版本之后添加了此功能。



