我应该使用什么样的损失函数来解决这个 multi-class multi-label(?) 问题?
What sort of loss function should I use this multi-class multi-label(?) problem?
在我的实验中,我试图训练一个神经网络来检测患者是否表现出症状 A、B、C、D。我的数据包括每个患者不同角度的照片以及他们是否有症状 A, B、C、D。
现在,pytoch,我正在使用 MSELoss 并将我的测试错误计算为分类总数中正确分类的总数。我猜这太天真了,甚至不合适。
测试误差计算的示例如下所示:
假设我们有 2 名患者,每名患者有两张图像。那么总共会有 16 个分类(1 个用于患者 1 是否有照片 1 中的症状 A、B、C、D,等等)。如果模型正确预测照片 1 中患者 1 表现出症状 A,那么正确分类的总数将增加 1。
我建议在多class 多标签class化中使用binary-crossentropy
。对于多标签 class化,这似乎违反直觉,但请记住,这里的目标是将每个输出标签视为独立分布(或 class)。
在pytorch
中你可以使用torch.nn.BCELoss(weight=None, size_average=None, reduce=None, reduction='mean')
。这创建了一个标准来衡量目标和输出之间的二进制交叉熵。
在我的实验中,我试图训练一个神经网络来检测患者是否表现出症状 A、B、C、D。我的数据包括每个患者不同角度的照片以及他们是否有症状 A, B、C、D。
现在,pytoch,我正在使用 MSELoss 并将我的测试错误计算为分类总数中正确分类的总数。我猜这太天真了,甚至不合适。
测试误差计算的示例如下所示: 假设我们有 2 名患者,每名患者有两张图像。那么总共会有 16 个分类(1 个用于患者 1 是否有照片 1 中的症状 A、B、C、D,等等)。如果模型正确预测照片 1 中患者 1 表现出症状 A,那么正确分类的总数将增加 1。
我建议在多class 多标签class化中使用binary-crossentropy
。对于多标签 class化,这似乎违反直觉,但请记住,这里的目标是将每个输出标签视为独立分布(或 class)。
在pytorch
中你可以使用torch.nn.BCELoss(weight=None, size_average=None, reduce=None, reduction='mean')
。这创建了一个标准来衡量目标和输出之间的二进制交叉熵。