当两个不同的损失相差较大时,如何正确地将两个不同的损失相加?

问题描述 投票:0回答:1

我有两种不同的损失来训练模型。

L1
损失计算如下:

recon_loss += F.l1_loss(pred_values, masked_patches) / total_num_masked

以及我的模型的另一个自定义损失函数,用于计算两个 3D 数据立方体的损失,

new_criterion = MyLoss(...)
。这两个损失加上重量:

# apply pixel-level loss
l1_weight = 0.1
errG = recon_loss * l1_w

new_loss = new_criterion(recon_cube, orig_cube).to(device)
errF_weight = 1.0
errF = new_loss * errF_weight

loss_total = errG + errGF

二元损失函数的输出如下:

(Pdb) errF
tensor(0.8987, grad_fn=<MulBackward0>)
(Pdb) errG
tensor(2.4668e-05, grad_fn=<MulBackward0>)

看起来两个损失值之间的差异相当大,给

F.L1
(recon_loss)赋予较低的权重,它会变得更小。

  1. 这个值的差异(即较小的值(2.4668e-05)与较大的值(0.8987),然后将它们相加得到

    loss_total
    )是否会影响训练?如果是,我们如何解决这个问题并确保模型训练得很好,从两种损失中受益?

  2. 通常如何将两个不同的损失加在一起来训练模型?

tensorflow machine-learning deep-learning pytorch loss-function
1个回答
0
投票

我使用的一些架构同时使用多个损失,他们根据每个损失函数的重要性和规模调整权重。

您可以查看示例 fastpitch 模型

loss = (mel_loss
                + dur_pred_loss * self.dur_predictor_loss_scale
                + pitch_loss * self.pitch_predictor_loss_scale
                + energy_loss * self.energy_predictor_loss_scale
                + attn_loss * self.attn_loss_scale)
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.