pytorch 多次backward

举报
风吹稻花香 发表于 2021/09/29 23:29:11 2021/09/29
【摘要】 pytorch 多次backward 影响pytorch梯度的参数: 1.requires_grad 需要为True for param in model.named_parameters(): if param[0] in need_frozen_list: param[1].requires_grad ...

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=<AddBackward0>)
      tensor([8.])
      tensor([16.])
  
 


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

文章来源: blog.csdn.net,作者:AI视觉网奇,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/jacke121/article/details/120529871

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。