python - sparse_categorical_crossentropy 和 categorical_crossentropy 有什么区别?

标签 python tensorflow machine-learning keras deep-learning

sparse_categorical_crossentropycategorical_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。

ccescce 是模型输出。 cce是每个类别的概率数组,共1.0。 scce 显示 MOST LIKELY 类别,总计 1.0。

scce 在技术上是一个单热数组,就像用作门挡的锤子仍然是锤子,但其用途不同。 cce 不是一次性的。

关于python - sparse_categorical_crossentropy 和 categorical_crossentropy 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58565394/

相关文章:

python - 为什么'new_file + = line + string'比'new_file = new_file + line + string'快得多?

Python Lambda没有找到这样的文件或目录运行时问题

tensorflow - Tesla V100 上的 TF1.4 未启用混合精度

python - 如何从子矩阵组成矩阵?

python - 如何使用 matplotlib 在 python 中保存绘图?

tensorflow - 什么是 TensorFlow 中的动态 RNN?

python - 乘法 tf.range() 的优雅方式

machine-learning - 使用自定义模型进行 Tensorflow 对象检测

python - 带有 SVM 基分类器的 AdaBoost 的执行时间

machine-learning - 生成对抗网络生成具有一些随机像素的图像