import torch
import warnings
warnings.filterwarnings("ignore")
w = torch.tensor([1.],requires_grad=True)
x = torch.tensor([2.],requires_grad=True)
# print(w.shape)
a = torch.add(w,x)
# 如果想保存a的张量梯度
# a.retain_grad()
b = torch.add(w,1)
y = torch.mul(a,b)
y.backward()
print(w.grad)
# 查看叶子节点
print('is_leaf:n',w.is_leaf,x.is_leaf,a.is_leaf,y.is_leaf)
# 查看梯度
print('Grandient:n',w.grad,x.grad,a.grad,b.grad,y.grad)
"""
is_leaf:
True True False False
Grandient:
tensor([5.]) tensor([2.]) None None
"""
# 表明不是叶子节点的梯度会被释放掉,节约内存
# 查看grad_fn - 记录创建张量时所用的方法
print('grad_fn:n',w.grad_fn,x.grad_fn,a.grad_fn,b.grad_fn,y.grad_fn)
"""
动态图与静态图的区别
动态图:运算和搭建同时进行,灵活 易调节 Pytorch
静态图:先构建计算图,后运算,高校 不灵活 TensorFlow
"""