RuntimeError: leaf variable has been moved into the graph interior(Pytorch报错)

有时候想在pytorch中修改训练过程中网络模型的参数。比如做网络稀疏化训练,对于某一层卷基层的参数,如果值小于一定阈值就想赋值为0,这时就需要实时修改网络模型的参数,如果直接修改会报错:

        RuntimeError: leaf variable has been moved into the graph interior

这是因为pytorch中会有叶子张量和非叶子张量之分,这个主要是为了节省内存或显存。pytorch中网络模型中的张量默认是叶子张量,系统会默认对其进行求导,其它都为非叶子张量,非叶子张量比如中间变量不会进行求导。如果直接对模型中的变量进行修改,那么

叶子张量会自动变成非叶子张量,不再被求导,就会爆出上述错误。

 

        可以通过添加with torch.no_grad():把需要修改的叶子张量包裹起来的,那么 梯度就不会被跟踪,也就能够顺利修改网络中的参数了,如下例,我是想对网络卷积层进行排序调换顺序,如果没有添加with torch.no_grad():就会报错,添加了就可以顺利执行了

               with torch.no_grad():
                      temp = module.weight[i]
                      module.weight[i] = module.weight[j]
                      module.weight[j] = temp

       参考文章:https://www.cnblogs.com/jiangkejie/p/13390377.html

                         https://zhuanlan.zhihu.com/p/69294347

 

 

 

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值