gpt4 book ai didi

python - 什么是逻辑? softmax 和 softmax_cross_entropy_with_logits 有什么区别?

转载 作者:IT老高 更新时间:2023-10-28 12:07:03 32 4
gpt4 key购买 nike

tensorflow API docs他们使用名为 logits 的关键字。它是什么?很多方法都是这样写的:

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

如果logits只是一个通用的Tensor输入,为什么叫logits


其次,下面两种方法有什么区别?

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

我知道 tf.nn.softmax 做什么,但不知道另一个。举个例子会很有帮助。

最佳答案

softmax+logits 仅仅意味着该函数对早期层的未缩放输出进行操作,并且理解单位的相对比例是线性的。特别是,这意味着输入的总和可能不等于 1,即这些值是 not 概率(您的输入可能为 5)。在内部,它首先将 softmax 应用于未缩放的输出,然后计算这些值与它们“应该”由标签定义的交叉熵。

tf.nn.softmax 产生应用 softmax function 的结果到输入张量。 softmax 将输入“压扁”,使 sum(input) = 1,它通过将输入解释为对数概率(logits)然后将它们转换回 0 到 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]]

this answer详细了解为什么在 DNN 中广泛使用 softmax。

tf.nn.softmax_cross_entropy_with_logits 将 softmax 步骤与应用 softmax 函数后的交叉熵损失的计算相结合,但它以更数学上更谨慎的方式将这一切结合在一起。结果类似于:

sm = tf.nn.softmax(x)
ce = cross_entropy(sm)

交叉熵是一个汇总度量:它对元素求和。 tf.nn.softmax_cross_entropy_with_logits 在形状 [2,5] 张量上的输出是形状 [2,1] (第一维被视为批处理)。

如果您想进行优化以最小化交叉熵并且您在最后一层之后进行 softmaxing,您应该使用 tf.nn.softmax_cross_entropy_with_logits 而不是这样做你自己,因为它以数学上正确的方式涵盖了数值不稳定的极端情况。否则,你最终会通过到处添加小 epsilon 来破解它。

于 2016 年 2 月 7 日编辑:如果您有单类标签,其中一个对象只能属于一个类,您现在可以考虑使用 tf.nn.sparse_softmax_cross_entropy_with_logits 这样您就不必将标签转换为密集标签-热阵列。此功能是在 0.6.0 版本之后添加的。

关于python - 什么是逻辑? softmax 和 softmax_cross_entropy_with_logits 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34240703/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com