1.Autograd
- grad和grad_fn
- grad:该tensor的梯度值,每次在计算backward时都需要将前一时刻的梯度归零,否则梯度值会一直累加
- grad_fn:叶子结点通常为None,只有结果节点的grad_fn才有效,用于只是梯度函数时哪种类型
- torch.autograd.backward(tensors,grad_tensors,retain_graph,create_graph)
- 参数tensors:用于计算梯度的tensor
- 参数grad_tensors:在计算矩阵的梯度时会用到
- 参数retain_graph:通常在调用一次backward后,pytorch会自动把计算图销毁,所以想要对某个变量重复调用backward,则需要将该参数值设为True,默认值为False
- 参数create_graph:如果为True,则会创建一个专门计算微分的图
- torch.autograd.grad(output,input,grad_output,retain_graph,create_graph,only_input,allow_unused)
- 计算和返回output关于input的梯度的和
- 参数output:函数的因变量,即需要求导的函数
- 参数input:函数的自变量
- 参数grad_output、retain_graph、create_graph:同backward
- 参数only_input:值为True时只计算input的梯度
- 参数allow_unused:值为False时,当计算输出出错时,指明不使用inpiu
- torch.autograd.Function
- 每一个原始的自动求导运算实际上是两个在tensor上运行的函数
- forward函数:计算从输入tensor获得的输出tensor
- backward函数:接收输出tensor对于某个标量值的梯度,并且计算输入tensor相对于该相同标量值的梯度
- 利用apply方法执行相应的运算
- 每一个原始的自动求导运算实际上是两个在tensor上运行的函数
python
import torch
class line(torch.autograd.Function):
@staticmethod
def forward(ctx, w, x, b):
ctx.save_for_backward(w,x,b)
return w * x + b
@staticmethod
def backward(ctx,grad_out):
w,x,b = ctx.saved_tensors
grad_w = grad_out * x
grad_x = grad_out * w
grad_b = grad_out
return grad_w, grad_x, grad_b
w = torch.rand(2,2,requires_grad=True)
x = torch.rand(2,2,requires_grad=True)
b = torch.rand(2,2,requires_grad=True)
out = line.apply(w,x,b)
out.backward(torch.ones(2,2))
print(w,x,b)
print(w.grad)
print(x.grad)
print(b.grad)
- 其他torch.autograd包中的函数
- torch.autograd.enable_grad:启动梯度计算的上下文管理器
- torch.autograd.no_grad:禁止梯度计算的上下文管理器
- torch.autograd.set_grad_enabled(mode):设置是否进行梯度计算的上下文管理器
2.nn库
torch.nn库是专门为神经网络设计的模块化接口,自动计算前向传播和反向传播,可以用来定义和运行神经网络。
- nn.Parameter & nn.ParameterList & nn.ParameterDict
- 定义可训练参数
- nn.Linear & nn.conv2d & nn.ReLU & nn.MaxPool2d & nn.MSELoss
- 各种神经网络层的定义,继承于nn.Module的子类
- nn.functional
- 包含了torch.nn库中所有的函数,包含大量loss和activation function
- nn.functional.xxx是函数接口
- nn.functional.xxx无法与nn.Sequential结合使用
- nn.Sequential
- 通过一个序列的方法完成对一个网络的定义
- nn.ModuleList
- 用于搭建一个网络模型
- nn.MouduleDict
- 通过字典的方式搭建一个网络模型
具体案例使用,后期在神经网络的学习中
知识点为听课总结笔记,课程为B站"2025最新整合!公认B站讲解最强【PyTorch】入门到进阶教程,从环境配置到算法原理再到代码实战逐一解读,比自学效果强得多!":2025最新整合!公认B站讲解最强【PyTorch】入门到进阶教程,从环境配置到算法原理再到代码实战逐一解读,比自学效果强得多!_哔哩哔哩_bilibili