pytorch 一个 Tensor的 is_leaf requires_grad 两个属性同时 为 True 才会保存 grad

根据下面的代码和输出,不难发现在 loss 执行完 backward 操作之后
只有那些 requires_gradis_leaf 的属性同时为 TrueTensor 才会有 grad 属性。
不满足上面的条件也想要保存 grad,见这篇博文 Pytorch关于requires_grad_(True)的理解

而根据 这篇文章
Tesor 在下面几种情况下,才会是 leaf

在这里插入图片描述

# Creating the graph
x = torch.tensor([1.,2.,3.], requires_grad = True)
y = torch.tensor([4.,5.,6.], requires_grad = True)
z = x+y
loss = (z*z).sum()
loss.backward() #Computes the gradient

print("x requires_grad",x.requires_grad)
print('x is_leaf',x.is_leaf)
print('x grad_data',x.grad.data)

print("\ny requires_grad",y.requires_grad)
print('y is_leaf',y.is_leaf)
print('y grad_data',y.grad.data) 

print("\nz requires_grad",z.requires_grad)
print('z is_leaf',z.is_leaf)

print("\nloss requires_grad",loss.requires_grad)
print('loss is_leaf',loss.is_leaf)

print('loss grad_data',loss.grad.data) 
print('z grad_data',z.grad.data) 

输出:

x requires_grad True
x is_leaf True
x grad_data tensor([10., 14., 18.])

y requires_grad True
y is_leaf True
y grad_data tensor([10., 14., 18.])

z requires_grad True
z is_leaf False

loss requires_grad True
loss is_leaf False

  File "xx.py", line 27, in <module>
    print('loss grad_data',loss.grad.data) #Prints '3' which is dz/dx
AttributeError: 'NoneType' object has no attribute 'data'

z grad_data 也是一样的报错,就不贴上来了
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

培之

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值