为什么我的目标标签需要从 0 开始才能使稀疏分类交叉熵起作用?

数据挖掘 Python 喀拉斯 美国有线电视新闻网 分类数据
2022-02-13 14:12:59

我正在按照此处的指南在 Keras 中实现图像分割。

我感到困惑的一件事是这些行:

# Ground truth labels are 1, 2, 3. Subtract one to make them 0, 1, 2:
y[j] -= 1

地面实况目标是.png在特定像素位置具有 1,2 或 3 的文件,以指示以下内容:

Pixel Annotations: 1: Foreground 2:Background 3: Not classified

当我删除它-1时,我的sparse_categorical_crossentropy价值观就像nan在训练期间一样出来。

Epoch 1/15
 25/196 [==>...........................] - ETA: 27s - loss: nan - accuracy: 0.0348 - sparse_categorical_crossentropy: nan  

为什么会这样?如果可能的整数值为 1、2、3,为什么我需要将它们更改为从 0 开始才能正确使用?

如果我包括-1,培训看起来是正确的:

Epoch 1/15
196/196 [==============================] - 331s 2s/step - loss: 2.0959 - accuracy: 0.6280 - sparse_categorical_crossentropy: 2.0959 - val_loss: 1.9682 - val_accuracy: 0.5749 - val_sparse_categorical_crossentropy: 1.9682
1个回答

看看这个 stackoverflow 答案,这似乎是由于你的标签需要零索引,因为argmax函数还返回基于零索引数组的索引。