【问题标题】:What sort of loss function should I use this multi-class multi-label(?) problem?我应该使用这种多类多标签(?)问题的哪种损失函数?
【发布时间】:2020-03-14 11:02:03
【问题描述】:

在我的实验中,我试图训练一个神经网络来检测患者是否表现出症状 A、B、C、D。我的数据包括每位患者的不同角度照片以及他们是否有症状 A、B、 C,D。

现在,pytoch,我正在使用 MSELoss 并将我的测试错误计算为分类总数中正确分类的总数。我猜这太天真了,甚至不合适。

测试错误计算的示例如下: 假设我们有 2 位患者,他们每人有两张图像。然后将有 16 个总分类(1 表示患者 1 是否有照片 1 中的症状 A、B、C、D 等)。如果模型正确预测照片 1 中患者 1 表现出症状 A,那么这将使正确分类的总数增加 1。

【问题讨论】:

    标签: deep-learning pytorch loss-function multilabel-classification multiclass-classification


    【解决方案1】:

    我建议在多类多标签分类中使用binary-crossentropy。这对于多标签分类来说似乎违反直觉,但请记住,这里的目标是将每个输出标签视为一个独立的分布(或类)。

    pytorch 中,您可以使用torch.nn.BCELoss(weight=None, size_average=None, reduce=None, reduction='mean')。这将创建一个衡量目标和输出之间的二元交叉熵的标准。

    【讨论】:

    • 值得一提的是输出层应该有 sigmoid 激活。或者,不使用激活和 BCEWithLogitsLoss,它具有内置的 sigmoid,并且在数值上更稳定。
    • 但是 OP 说它是多类的,所以我们不想要常规的交叉熵吗?不是二进制的。
    • @jchaykow OP 正试图按照二元类 A、B、C、D 对一名患者进行分类,这是一个具有 4 个预测的二元分类问题。
    猜你喜欢
    • 2020-08-12
    • 2021-11-23
    • 1970-01-01
    • 2018-10-27
    • 1970-01-01
    • 2016-03-28
    • 2021-10-04
    • 2023-01-18
    • 2019-06-01
    相关资源
    最近更新 更多