如何扩展损失函数 Pytorch

How to extend a Loss Function Pytorch

我想创建自己的自定义损失函数作为 3 个损失函数的加权组合,类似于:

criterion = torch.nn.CrossEntropyLoss(out1, lbl1) + \
            torch.nn.CrossEntropyLoss(out2, lbl2) + \
            torch.nn.CrossEntropyLoss(out3, lbl3)

我这样做是为了解决多 class 多标签 class 化问题。 是否有意义?如何在Pytorch中正确实现这样的损失函数?

谢谢

您解决问题的方法似乎是正确的,但您的代码中有错字。这是一个解决方法:

loss1 = torch.nn.CrossEntropyLoss()(out1, lbl1)
loss2 = torch.nn.CrossEntropyLoss()(out2, lbl2) 
loss3 = torch.nn.CrossEntropyLoss()(out3, lbl3)

final_loss = loss1 + loss2 + loss3

然后您可以在 final_loss 上调用 .backward,它会计算梯度并反向传播它们。

此外,可以加权每个组件损失,其中权重本身学习 在训练过程中。

更多信息可以参考combine-multiple-criterions-to-a-loss-function的讨论