PyTorch笔记5----------Autograd、nn库

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方法执行相应的运算
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

相关推荐
cuiZero01 分钟前
主流大模型系列对比:GPT、GLM、DeepSeek 与 Claude 选型指南
大数据·人工智能·gpt
ab1237682 分钟前
MQTT笔记
java·笔记·mqtt·学习
硅农深芯4 分钟前
芯片设计中的版图依赖效应:被忽视的性能隐形约束
人工智能·layout·版图依赖效应·lde
闭包不眠5 分钟前
Word转HTML后体积不对,裁掉的截图原图还在
前端·图像处理·人工智能·计算机视觉·html·word
TMT星球5 分钟前
高精度还原指尖细节 觅蜂科技提出4D数据重建框架MEgoVista
人工智能·科技
启友玩AI6 分钟前
微安级唤醒、毫安级识别:基于 CI3422 的 AI 眼镜语音交互开发实战
c语言·人工智能·科技·嵌入式硬件·ai·ar·语音识别
xixixi777778 分钟前
大语言模型(LLM)核心能力及在政务领域的全域落地应用解析
人工智能·安全·ai·语言模型·大模型·数据处理·政务
开发笔记-阿牛8 分钟前
AM收音机蓝牙二合一设计复盘
人工智能·单片机·嵌入式硬件·音视频·音频
张继雁9 分钟前
30~50MPa数控高压清洗:前端分级过滤逻辑,抑制硬质磨粒对喷嘴冲蚀
大数据·数据库·人工智能·机器学习·创业创新
言乐611 分钟前
PythonLOLM自动生成复盘报告模型
开发语言·前端·数据库·人工智能·python