import torch
"""
Tensor是这个包的核心类,
如果将其属性.requires_grad设置为True,
它将开始追踪(track)在其上的所有操作(这样就可以利用链式法则进行梯度传播了)。完成计算后,可以调用.backward()来完成所有梯度计算。
此Tensor的梯度将累积到.grad属性中。
如果不想要被继续追踪,可以调用.detach()将其从追踪记录中分离出来,这样就可以防止将来的计算被追踪,这样梯度就传不过去了。
此外,还可以用with torch.no_grad()将不想被追踪的操作代码块包裹起来
y.backward()时,如果y是标量,则不需要为backward()传入任何参数;否则,需要传入一个与y同形的Tensor
Function是另外一个很重要的类。Tensor和Function互相结合就可以构建一个记录有整个计算过程的有向无环图(DAG)。
每个Tensor都有一个.grad_fn属性,该属性即创建该Tensor的Function, 就是说该Tensor是不是通过某些运算得到的,
若是,则grad_fn返回一个与这些运算相关的对象,否则是None。
"""
x=torch.ones(2,2,requires_grad=True) #直接创建得是叶子节点
print(x.is_leaf)
print(x.grad_fn)
y=2*x+2
print(y.is_leaf)
print(y.grad_fn)
y.backward(torch.ones_like(y))
print('梯度',x.grad)
x.grad.data.zero_()
print(x.grad)
参考文献: