什么是sparse_categorical_crossentropy
和categorical_crossentropy
之间的区别?什么时候应该使用一种损失而不是另一种?例如,这些损失是否适合线性回归?
回答:
简而言之:
categorical_crossentropy
(cce
) 生成一个包含每个类别可能匹配的独热数组,sparse_categorical_crossentropy
(scce
) 生成最可能匹配类别的类别索引。
考虑一个有5个类别(或类)的分类问题。
-
在
cce
的情况下,独热目标可能是[0, 1, 0, 0, 0]
,模型可能会预测[.2, .5, .1, .1, .1]
(可能是正确的) -
在
scce
的情况下,目标索引可能是[1],模型可能会预测:[.5]。
现在考虑一个有3个类的分类问题。
- 在
cce
的情况下,独热目标可能是[0, 0, 1]
,模型可能会预测[.5, .1, .4]
(可能不准确,因为它给第一个类分配了更多的概率) - 在
scce
的情况下,目标索引可能是[0]
,模型可能会预测[.5]
许多分类模型生成scce
输出,因为这样可以节省空间,但会丢失很多信息(例如,在第二个例子中,索引2也非常接近)。我通常更喜欢cce
输出以确保模型的可靠性。
使用scce
的情况包括:
- 当你的类别是互斥的,即你完全不关心其他接近的预测,
- 类别的数量很大,导致预测输出变得难以处理。
220405:回应“独热编码”评论:
独热编码用于选择特定类别的类别特征输入(例如,男性与女性)。这种编码允许模型更有效地训练:训练权重是类别的乘积,除了给定的类别外,其他类别均为0。
cce
和scce
是模型的输出。cce
是每个类别的概率数组,总和为1.0。scce
显示最可能的类别,总和为1.0。
scce
在技术上是一个独热数组,就像用作门挡的锤子仍然是锤子一样,但其用途不同。cce
不是独热编码。