【问题标题】:Multi-class classification with discrete output: Which loss function and activation to choose?具有离散输出的多类分类:选择哪个损失函数和激活?
【发布时间】:2020-06-19 22:55:07
【问题描述】:

我正在使用 Keras Sequential 模型处理多类分类问题。在我的数据集中,输出类具有以下值之一: (1, 2, 3, 4, 5).

是的,我已经尝试过对输出进行 one-hot-encoding 并使用categorical_crossentropy 作为损失函数并在输出层使用softmax

但是,我认为 softmax 和分类交叉熵不是我的正确选择。在我的数据集中,输出类具有一定的“离散性”(或规模)。 1 类是“最差”,5 类是“最好”。

假设在特定输入上,模型预测 2 并且真实类别是 1,这是一个更好的预测,因为模型预测类别 5 并且真实类别是 1

我希望损失函数会考虑这些“小错误”,而不是以相同的方式处理所有错误。

总而言之,我想知道在给定问题的损失函数和输出层激活方面我的选择是什么。

【问题讨论】:

  • 为处理类似问题的每个人更新: 1. 尝试使用mean_squared_error 作为您的损失函数,输出层:Dense(1, activation='linear')。 2. 我从@naive 收到的另一个建议是查看ordinal regression

标签: python tensorflow keras loss-function multiclass-classification


【解决方案1】:

根据您的要求,我强烈建议您创建损失函数。 通过这种方式,您可以按照您希望的方式处理结果。基本上在创建损失函数时,您只需要 y_predy_true,然后将其作为张量返回

还值得注意的是,在创建任何自定义损失优化器时。 只允许使用 Tensor Flow 后端操作,因为使用 Numpy 之类的库会导致编译 错误

这是 Tensor Flow 文档中的 link,用于在您的模型中进行自定义训练

【讨论】:

  • 谢谢,我去看看——我之所以没有使用自定义损失函数是因为我发现mean_squared_error实际上非常适合我的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-08-29
  • 2018-10-04
  • 2021-01-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多