【问题标题】:How to deal with ordinal labels in keras?如何处理 keras 中的序数标签?
【发布时间】:2017-07-27 01:38:54
【问题描述】:

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

我的处理方式是:

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

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 有什么区别?

【问题讨论】:

  • 使用序数尺度,回归和分类都有意义。 AFAIK 分类损失,如 categorical_crossentropy,但不考虑“距离”(即所有错误分类同样错误),因此不使用所有实际可用的信息。

标签: deep-learning keras keras-layer


【解决方案1】:

回归和分类是完全不同的东西。如果您将其重新想象为一项回归任务,那么当基本事实为 4 时预测 2 的差异将比您预测 3 而不是 4 的差异更高。如果您有汽车、动物、人等类别,则您不关心排名这些类之间。如果图像显示的是人,那么预测汽车和动物一样错误。

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

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

【讨论】:

  • 谢谢 Thomas Pinetz 然后我肯定有回归问题,因为我试图获得预测值和观察值之间的差异。以下更改会使 NN 适合回归吗? 1- 不使用 to_categorical() 2- 在输出层,我有一个节点并且没有激活。 3-损失是'mean_squared_error'
  • 在这种情况下,均方误差是有意义的,因为 H.H.H 使用序数刻度。
猜你喜欢
  • 2017-10-25
  • 1970-01-01
  • 1970-01-01
  • 2016-02-17
  • 1970-01-01
  • 2021-01-09
  • 1970-01-01
  • 2013-01-14
相关资源
最近更新 更多