Pytorch中的多个loss和的梯度回传
TODO 总 loss 由多个 loss 组成。如果只有一个 loss,那么直接 loss.backward()即可,不止一个 loss 时, backward()放在哪里?
目前的写法:
loss1= Loss(output[0], target)
loss2= Loss(output[1], target)
loss3= Loss(output[2], target)
loss4= Loss(output[3], target)
loss = loss1 + loss2 + loss3 + loss4
loss.backward()
1
2
3
4
5
6
7
2
3
4
5
6
7
补充
- 关于张量 tensor 中的 require_grad 属性: 如果一个张量它的 requires_grad=True,那么在反向传播计算梯度时调用 backward()方法就会计算这个张量的梯度。但是需要注意的是:计算完梯度之后,这个梯度并不一定会一直保存在属性 grad 中,只有对于 requires_grad=True 的叶子结点才会一直保存梯度,即将梯度一直保存在该叶子张量的 grad 属性中。而对于非叶子节点,即中间节点的张量,我们在计算完梯度之后为了更高效地利用内存,一般会将中间计算的梯度释放掉。
References
上次更新: 2025/04/02, 12:03:38