torch叶子节点才能保存grad,叶子节点如何修改才不变为中间节点,保留grad呢?使用data

#梯度存储在自变量中,grad属性中
import torch

x = torch.tensor([3.0,5],requires_grad=True)#x设为可以求梯度,由他生成的变量均可求导

x1=torch.tensor([3.7,4])#默认不可求梯度

y = x ** 2+x1  #x是叶子节点,y是非叶子节点,backward()后y.grad_fn, y.grad不存在


z=y[0]+y[1]

#判断x,y,z是否是可以求导的
print("x1:",x1.requires_grad)
print("x:",x.requires_grad)
print("y:",y.requires_grad)

z.backward()  #反向求导
##print("y.grad",y.grad()) #y非叶子节点 grad不存在 报错
print("x.grad",x.grad)

x=x+1  #x变为非叶子节点 grad将不存在-------------替换为:x.data=x.data+1
#要改变x的值可以用 x.data=x.data+1,x还是叶子节点还能保存grad

print(x.grad)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值