如何处理keras中的序号标签?

How to deal with ordinal labels in keras?

我有整数目标 class 在 1-5 范围内的数据,其中 1 是最低的,5 是最高的。在这种情况下,我是否应该将其视为回归问题并在输出层中有一个节点?

我的处理方式是:

1- 首先我将标签转换为二进制 class 矩阵

labels = to_categorical(np.asarray(labels))

2-在输出层,我有五个节点

main_output = Dense(5, activation='sigmoid', name='main_output')(x)

3-我在编译时使用'categorical_crossentropy和mean_squared_error

model.compile(optimizer='rmsprop',loss='categorical_crossentropy',metrics=['mean_squared_error'],loss_weights=[0.2])

此外,谁能告诉我:在这种情况下使用 categorical_accuracy 和 'mean_squared_error 有什么区别?

回归和class化是截然不同的事情。如果您将其重新想象为一项回归任务,那么当基本事实为 4 时预测 2 的差异将比您预测 3 而不是 4 时的差异评级更高。如果您有 class 喜欢汽车,动物,人您没有关心那些 classes 之间的排名。预测汽车和预测动物一样错误,如果图像显示的是人。

指标完全不会影响您的学习。它只是在损失之外计算的东西,以显示模型的性能。这里的准确性是有道理的,因为这主要是我们关心的指标。均方误差并不能告诉您模型的性能如何。如果你得到类似 0.0015 的均方误差,这听起来不错,但很难想象它的性能有多好。相反,使用准确度并达到 95% 的准确度是有意义的。

最后一件事你应该使用 softmax 而不是 sigmoid 作为你的最终输出以获得最后一层的概率分布。 Softmax 会输出每个总和为 1 的 class 的百分比。然后交叉熵计算你的网络输出的概率分布与 ground truth 的差异。