我想创建自己的自定义损失函数作为3损失函数的加权组合,类似于:
criterion = torch.nn.CrossEntropyLoss(out1, lbl1) + \
torch.nn.CrossEntropyLoss(out2, lbl2) + \
torch.nn.CrossEntropyLoss(out3, lbl3)
我正在这样做以解决多类多标签分类问题。 是否有意义?如何在Pytorch中正确实现这种损失函数?
谢谢
答案 0 :(得分:1)
您解决问题的方法似乎是正确的,但是您的代码中有错别字。这是针对此问题的解决方法:
loss1 = torch.nn.CrossEntropyLoss()(out1, lbl1)
loss2 = torch.nn.CrossEntropyLoss()(out2, lbl2)
loss3 = torch.nn.CrossEntropyLoss()(out3, lbl3)
final_loss = loss1 + loss2 + loss3
然后您可以在.backward
上调用final_loss
,然后应该计算梯度并反向传播它们。
此外,在训练过程中权重本身是学习的地方,也有可能权重每个分量损失。
您可以参考combine-multiple-criterions-to-a-loss-function的讨论以获取更多信息。