如果我有多个损失加在一起,我是否必须声明单独的损失函数?

时间:2021-06-26 23:44:28

标签: python pytorch

我正在尝试训练一个使用多个损失的模型。我注意到在某些实现中,单个损失函数被声明为 loss_fct = nn.LossFunction() 并多次使用来计算单独的损失,这些损失被求和并反向传播。例如:

loss_fct = nn.LossFunction()

loss1 = loss_fct(pred1, labels1)
loss2 = loss_fct(pred2, labels2)

total_loss = loss1 + loss2
total_loss.backward()
optimizer.step()

这样可以吗,还是应该为每个损失声明单独的损失函数对象?如果这没问题,为什么没问题?这对我来说似乎违反直觉,因为它们是我们为不同目的优化的单独损失。求和和反向传播一次有点道理,但我无法使用单个损失对象。

1 个答案:

答案 0 :(得分:2)

您必须创建某些损失函数的实例的原因是,某些损失函数具有影响它们计算方式的可选参数。

例如 MSELoss 支持不同的缩减模式。

如果您在每个输出上计算相同的损失函数(损失函数本身具有相同的参数化),则无需实例化损失函数的多个实例。