为这个基本问题道歉。我对这个函数没有深入的了解,但我很确定如果 logits 和 label 输入相同,它会为零。我发现我的 MLP 模型很好地解决了我的分类问题,但成本函数实际上从来不是 0(而是接近 -2.14442e+07 但实际上从来不是 0)。我已经测试了如果将 logits 和标签设置为相同的输入并且仍然相同会发生什么。我使用 tensorflow tf.nn.softmax_cross_entropy_with_logits 作为成本函数。感谢您的帮助。
如果 logits 和标签相同,softmax 与 logits 的交叉熵是否应该始终为零?
数据挖掘
机器学习
分类
张量流
2022-02-12 20:01:06
1个回答
Logits 是层中的预转换值,在计算成本函数时不直接与标签进行比较。事实上,对于 softmax 层,将匹配的 logit 设置为 1,其余设置为零甚至都不是那么好,因为(使用作为logit和作为激活):
用你的 0 和 1 值代替你会看到值不是那么接近 0 和 1(对于 10 个类,它们分别为 0.0853 和 0.2319)。正是这些激活值输入了损失计算。所以用典型的多类损失函数,对于这样的示例,您将获得 1.4611 的损失。
为了获得非常低的成本,请将匹配真实标签(或 1)的 logit 设置为更高的值,例如 10,并将匹配错误值(或零)的 logit 设置为较低的值,例如 -10。这会导致
在哪里
对于 1 和 0 之间的值,它在 10 和 -10 之间变化。
这应该会显着减少计算出的损失(10 类预测中的那些值是 1.855e-08)。logit 允许我们“拉伸”正确和错误预测的值。
在使用 softmax 或 sigmoid 输出和 logloss 时获得实际的 0 损失在技术上是不可能的。由于计算中的四舍五入,您可能会看到它。然而,sigmoid 和 softmax 都不等于 0 或 1,除非在输入值倾向于
其它你可能感兴趣的问题