如何扩展损失函数 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
,它会计算梯度并反向传播它们。
此外,可以加权每个组件损失,其中权重本身学习 在训练过程中。
我想创建自己的自定义损失函数作为 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
,它会计算梯度并反向传播它们。
此外,可以加权每个组件损失,其中权重本身学习 在训练过程中。