什么是logits,softmax和softmax_cross_entropy_with_logits?

发布于 2021-01-29 17:51:36

我正在这里浏览tensorflowAPI文档。在tensorflow文档中,他们使用了名为的关键字logits。它是什么?API文档中的许多方法都将其编写为

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

如果写的是什么是那些logitsTensors,为什么保持一个不同的名称,如logits

另一件事是,我无法区分两种方法。他们是

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

它们之间有什么区别?这些文档对我来说还不清楚。我知道是什么tf.nn.softmax呢。但是没有其他。一个例子将非常有帮助。

关注者
0
被浏览
158
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

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



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看