pytorch 多次backward

pytorch 多次backward

影响pytorch梯度的参数:

1.requires_grad 需要为True

for param in model.named_parameters():if param[0] in need_frozen_list:param[1].requires_grad = False

2.model.train(True)

如果网络需要多次求loss,多次求导反向传播:

如果我们再调用一次 backward,会发现程序报错,没有办法再做一次。这是因为 PyTorch 默认做完一次自动求导之后,计算图就被丢弃了,所以两次自动求导需要手动设置一个东西,我们通过下面的小例子来说明。

import torch
from torch.autograd import Variable
x = Variable(torch.FloatTensor([3]), requires_grad=True)
y = x * 2 + x ** 2 + 3
print(y)
y.backward(retain_graph=True) # 设置 retain_graph 为 True 来保留计算图
print(x.grad)
y.backward() # 再做一次自动求导,这次不保留计算图
print(x.grad)
结果:tensor([18.], grad_fn=)
tensor([8.])
tensor([16.])


可以发现 x 的梯度变成了 16,因为这里做了两次自动求导,所以讲第一次的梯度 8 和第二次的梯度 8 加起来得到了 16 的结果。
 


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部