在tensorflow API文档中,他们使用了一个叫做logits的关键字。是什么?很多方法都是这样写的:
tf.nn.softmax(logits, name=None)
如果logits只是一个通用的张量输入,为什么它被命名为logits?
其次,以下两种方法有什么区别?
tf.nn.softmax(logits, name=None)
tf.nn.softmax_cross_entropy_with_logits(logits, labels, name=None)
我知道tf.nn.softmax做什么,但不知道其他的。举个例子会很有帮助。
softmax+logits仅仅意味着该函数对早期层的未缩放输出进行操作,并且理解单位的相对缩放是线性的。这意味着,特别是输入的总和可能不等于1,这些值不是概率(你可能有一个5的输入)。在内部,它首先对未缩放的输出应用softmax,然后再计算这些值的交叉熵与标签所定义的“应该”值的交叉熵。
softmax产生将softmax函数应用于输入张量的结果。softmax“压缩”输入,使sum(输入)= 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]]
有关为什么softmax被广泛用于dnn的更多信息,请参阅这个答案。
tf.nn。Softmax_cross_entropy_with_logits将softmax步骤与应用softmax函数后的交叉熵损失计算结合在一起,但它以一种更精确的数学方式将它们结合在一起。它的结果类似于:
sm = tf.nn.softmax(x)
ce = cross_entropy(sm)
交叉熵是一种汇总度量:它对元素进行汇总。tf.nn的输出。形状[2,5]张量上的Softmax_cross_entropy_with_logits的形状为[2,1](第一个维度被视为批处理)。
如果你想做优化来最小化交叉熵,并且在最后一层之后进行软最大化,你应该使用tf.nn。Softmax_cross_entropy_with_logits而不是自己做,因为它以数学正确的方式涵盖了数值不稳定的角落情况。否则,你就会在这里和那里加上小的。
编辑2016-02-07:
如果您有单个类标签,其中一个对象只能属于一个类,那么您现在可以考虑使用tf.nn。Sparse_softmax_cross_entropy_with_logits,这样您就不必将标签转换为密集的单热数组。该功能是在0.6.0版之后添加的。
softmax+logits仅仅意味着该函数对早期层的未缩放输出进行操作,并且理解单位的相对缩放是线性的。这意味着,特别是输入的总和可能不等于1,这些值不是概率(你可能有一个5的输入)。在内部,它首先对未缩放的输出应用softmax,然后再计算这些值的交叉熵与标签所定义的“应该”值的交叉熵。
softmax产生将softmax函数应用于输入张量的结果。softmax“压缩”输入,使sum(输入)= 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]]
有关为什么softmax被广泛用于dnn的更多信息,请参阅这个答案。
tf.nn。Softmax_cross_entropy_with_logits将softmax步骤与应用softmax函数后的交叉熵损失计算结合在一起,但它以一种更精确的数学方式将它们结合在一起。它的结果类似于:
sm = tf.nn.softmax(x)
ce = cross_entropy(sm)
交叉熵是一种汇总度量:它对元素进行汇总。tf.nn的输出。形状[2,5]张量上的Softmax_cross_entropy_with_logits的形状为[2,1](第一个维度被视为批处理)。
如果你想做优化来最小化交叉熵,并且在最后一层之后进行软最大化,你应该使用tf.nn。Softmax_cross_entropy_with_logits而不是自己做,因为它以数学正确的方式涵盖了数值不稳定的角落情况。否则,你就会在这里和那里加上小的。
编辑2016-02-07:
如果您有单个类标签,其中一个对象只能属于一个类,那么您现在可以考虑使用tf.nn。Sparse_softmax_cross_entropy_with_logits,这样您就不必将标签转换为密集的单热数组。该功能是在0.6.0版之后添加的。
Tensorflow 2.0兼容答案:dga和stackoverflowuser2010的解释非常详细地介绍了Logits和相关的函数。
当在Tensorflow 1中使用这些函数时。X可以正常工作,但是如果您从1迁移代码。X(1.14, 1.15,等等)到2。X(2.0, 2.1,等等),使用这些函数会导致错误。
因此,如果我们从1迁移,则为上面讨论的所有函数指定2.0兼容调用。X到2。X,为了社区的利益。
1.x中的函数:
tf.nn.softmax
tf.nn.softmax_cross_entropy_with_logits
tf.nn.sparse_softmax_cross_entropy_with_logits
从1迁移时各自的函数。X到2.x:
tf.compat.v2.nn.softmax
tf.compat.v2.nn.softmax_cross_entropy_with_logits
tf.compat.v2.nn.sparse_softmax_cross_entropy_with_logits
有关从1迁移的更多信息。X到2。x,请参考本迁移指南。