在整个PyTorch框架中,所有的神经网络本质上都是一个outograd package(自动求导工具包)
autograd package提供了一个对Tensors上所有的操作进行自动微分的功能。
关于torch.Tensor
- torch.Tensor 是整个package中的核心类,如果将属性.requires_grad设置为Ture,它就自动的追踪在这个类上定义的所有造作。当代吗要进行反向传播的时候,支架调用.backward()就可以自动计算所有的梯度。在这个Tensor上的所有梯度将被累加进属性.grad中。
- 若果想终止一个Tensor在计算图中的追踪回溯,只需要执行.detach()就可以将该Tensor从计算图中撤下,在未来的回溯计算中也不会在计算该Tensor。
- 处理.detach(),如果想终止对计算图的回溯,也就是不在进行方向传播求导数的过程,也可以采用代码块的方式with torch.no_grad();这种方式非常适用对模型进行预测的时候,因为预测阶段不再需要对梯度进行计算。
关于torch.Function:
- Function类是和Tensor 类同等重要的一个核心类,他和Tensor共同创建了一个完整的类,每一个Tensor拥有一个.grad_fn属性,代表引用率那个具体的Function创建了该Tensor.
- 若果某个张量Tensor是用户自定义的,则其对应的grad_fn is None.
import torch
x1=torch.ones(3,3)
print(x1)
x=torch.ones(2,2,requires_grad=True)
print("x=",x)
y=x+2
print(y)
z=y*y*3
out=z.mean()
print(z,out)
print(x.grad_fn)
print(y.grad_fn)
print(z.grad_fn)
关于这些方法.require_grad_():该方法可以原地改变Tensor的属性.requires_grad的值。如果没有主动设定默认False.
a=torch.randn(2,2)
a=((a*3)/(a-1))
print(a.requires_grad)
a.requires_grad_(True)
print(a.requires_grad)
b=(a*a).sum()
print(b)
print(b.grad_fn)
浙公网安备 33010602011771号