Sparse_categorical_crossentropy vs categorical_crossentropy(keras,准确度)

数据挖掘 神经网络 喀拉斯 损失函数 编码
2021-10-13 20:26:44

哪个更准确,还是一样?当然,如果您使用,则categorical_crossentropy使用一种热编码,如果使用,则将sparse_categorical_crossentropy其编码为普通整数。此外,什么时候比另一个更好?

2个回答

当您的类互斥时(例如,当每个样本完全属于一个类时)使用稀疏分类交叉熵,当一个样本可以有多个类或标签是软概率(如 [0.5,0.3,0.2])时使用分类交叉熵。

分类交叉熵公式(S - 样本,C - 类, sc - 属于 c) 类的样品是:

1NsScC1sclogp(sc)

对于排他性类的情况,您不需要对它们求和 - 对于每个样本,只有非零值只是logp(sc)对于真正的 c 类。

这允许节省时间和内存。当它们互斥时考虑 10000 个类的情况 - 只有 1 个日志而不是对每个样本求和 10000,只有一个整数而不是 10000 个浮点数。

两种情况下的公式都是相同的,因此不会对准确性产生影响。

答案,简而言之

如果您的目标是一次性编码的,请使用categorical_crossentropy. one-hot 编码示例:

[1,0,0]
[0,1,0] 
[0,0,1]

但如果您的目标是整数,请使用sparse_categorical_crossentropy. 整数编码示例(为了完整起见):

1
2
3