sparse_categorical_crossentropy
和 categorical_crossentropy
有什么区别?什么时候应该使用一种损失而不是另一种?例如,这些损失是否适合线性回归?
最佳答案
简单地:
categorical_crossentropy
(cce
) 生成一个单热数组,其中包含每个类别的可能匹配项,sparse_categorical_crossentropy
(scce
) 生成最有可能匹配类别的类别索引。
考虑一个包含 5 个类别(或类别)的分类问题。
在
cce
的情况下,one-hot 目标可能是[0, 1, 0, 0, 0]
并且模型可能预测[.2, .5, .1, .1, .1]
(可能是对的)在
scce
的情况下,目标索引可能是 [1],模型可能预测:[.5]。
现在考虑一个包含 3 个类的分类问题。
- 在
cce
的情况下,one-hot 目标可能是[0, 0, 1]
并且模型可能预测[.5, . 1, .4]
(可能不准确,因为它给第一类的概率更大) - 在
scce
的情况下,目标索引可能是[0]
,模型可能预测[.5]
<
许多分类模型会产生 scce
输出,因为这样可以节省空间,但会丢失很多信息(例如,在第二个示例中,索引 2 也非常接近。)我通常更喜欢 cce
模型可靠性的输出。
scce
有多种使用场景,包括:
- 当你的类相互排斥时,即你根本不关心其他足够接近的预测,
- 类别数量大到预测输出变得不堪重负。
220405:对“one-hot encoding”评论的回应:
one-hot 编码用于类别特征输入以选择特定类别(例如男性与女性)。这种编码允许模型更有效地训练:训练权重是类别的乘积,对于除给定类别之外的所有类别均为 0。
cce
和 scce
是模型输出。 cce
是每个类别的概率数组,共1.0。 scce
显示 MOST LIKELY 类别,总计 1.0。
scce
在技术上是一个单热数组,就像用作门挡的锤子仍然是锤子,但其用途不同。 cce
不是一次性的。
关于python - sparse_categorical_crossentropy 和 categorical_crossentropy 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58565394/