【问题标题】:why did i got 2 different losses for sparse_categorical_crossentropy and categorical_crossentropy?为什么我的 sparse_categorical_crossentropy 和 categorical_crossentropy 有 2 种不同的损失?
【发布时间】:2020-11-02 14:50:16
【问题描述】:
我训练了一个用于多类分类的模型。有三个班。在第一种方法中,我通过将类转换为单热向量并训练具有损失函数、分类交叉熵的模型来训练模型,我在 1000 个 epoch 中实现了 0.07 的损失。但是当我使用相同的方法时,但是这次我没有将类转换为 one-hot 向量,而是使用 sparse_categorical_crossentropy 作为损失函数,这次我在 1000 个 epochs 中实现了 0.05 的损失。这是否意味着 sparse_categorical_crossentropy 是比 categorical_crossentropy 更好?
谢谢!
【问题讨论】:
标签:
python
deep-learning
tf.keras
loss-function
【解决方案1】:
由于损失的定义本身发生了变化,因此您无法比较两个损失函数的损失。您可以在相同的测试数据集上比较性能。
通常使用sparse_categorical_crossentropy 当你的类是互斥的(例如当每个样本完全属于一个类时)和categorical_crossentropy 当一个样本可以有多个类或标签是软概率(如 [0.5, 0.3, 0.2 ])。
由于标签的表示发生了变化,您得到了不同的损失,实际上在 keras 中,sparse_categorical_crossentropy 被定义为具有整数目标的分类crossentropy