Deep learning 我应该使用什么样的损失函数来解决这个多类多标签(?)问题?

Deep learning 我应该使用什么样的损失函数来解决这个多类多标签(?)问题?,deep-learning,pytorch,loss-function,multilabel-classification,multiclass-classification,Deep Learning,Pytorch,Loss Function,Multilabel Classification,Multiclass Classification,在我的实验中,我试图训练一个神经网络来检测患者是否表现出症状a、B、C、D。我的数据包括每个患者不同角度的照片以及他们是否有症状a、B、C、D 现在,在pytoch中,我正在使用MSELoss并将我的测试错误计算为分类总数中正确分类的总数。我猜这太天真了,甚至不合适 测试误差计算示例如下: 假设我们有两个患者,每个患者有两张图像。然后将有16个总分类(1个用于患者1是否有症状A、B、C、D,如照片1所示,等等)。如果模型正确预测了照片1中患者1出现症状A,那么正确分类的总数将增加1 我建议在多类

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

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

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

我建议在多类别多标签分类中使用
二进制交叉熵。对于多标签分类来说,这似乎违反直觉,但请记住,这里的目标是将每个输出标签视为一个独立的发行版(或类)


pytorch
中,您可以使用
torch.nn.BCELoss(重量=无,尺寸=无,减少=无,减少=平均值)
。这创建了一个标准,用于测量目标和输出之间的二进制交叉熵。

值得一提的是,输出层应具有sigmoid激活。或者,使用无激活和
BCEWithLogitsLoss
,它内置了一个sigmoid,并且在数值上更稳定。但是OP说它是多类的,所以我们不需要规则的交叉熵吗?不是二元的。@jchaykow OP试图按照二元分类A、B、C、D对一名患者进行分类,这是一个有4个预测的二元分类问题。