在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是一个归一化函数,它压缩神经网络的输出,使它们都在0到1之间,并且和为1。Softmax_cross_entropy_with_logits是一个损失函数,它接收神经网络的输出(在它们被softmax压缩后)和这些输出的真实标签,并返回一个损失值。

其他回答

以上答案对所问问题有足够的描述。

除此之外,Tensorflow还优化了应用激活函数,然后使用自己的激活和代价函数计算代价的操作。因此,使用tf.nn.softmax_cross_entropy() over tf.nn.softmax()是一个很好的实践;tf.nn.cross_entropy ()

在资源密集型模型中,你可以发现它们之间的显著差异。

对数是神经网络的非标准化输出。Softmax是一个归一化函数,它压缩神经网络的输出,使它们都在0到1之间,并且和为1。Softmax_cross_entropy_with_logits是一个损失函数,它接收神经网络的输出(在它们被softmax压缩后)和这些输出的真实标签,并返回一个损失值。

还有一件事我肯定想强调,因为logit只是一个原始输出,通常是最后一层的输出。这也可以是负值。如果我们使用它作为“交叉熵”评估,如下所述:

-tf.reduce_sum(y_true * tf.log(logits))

那就没用了。因为log (-ve)没有定义。 因此使用softmax激活,将克服这个问题。

这是我的理解,如果错了请指正。

softmax计算通过softmax层的前向传播。当您计算模型输出的概率时,您可以在模型的评估过程中使用它。

tf.nn。Softmax_cross_entropy_with_logits计算一个softmax层的开销。它只在训练时使用。

对数是输出模型的非归一化对数概率(在应用softmax归一化之前输出的值)。

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,请参考本迁移指南。