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

相关推荐
霖001 分钟前
FPGA通信设计十问
运维·人工智能·经验分享·vscode·fpga开发·编辑器
天上游戏地下人间14 分钟前
基于Opencv的缺陷检测实战
图像处理·人工智能·计算机视觉
A7bert77719 分钟前
【YOLOv8-obb部署至RK3588】模型训练→转换RKNN→开发板部署
linux·c++·人工智能·python·yolo
小和尚同志33 分钟前
使用 Dify 工作流实现每日热点简报
人工智能·aigc
快乐点吧36 分钟前
【前端】异步任务风控验证与轮询机制技术方案(通用笔记版)
前端·笔记
羡鱼饼饼39 分钟前
pytorch深度学习—RNN-循环神经网络
pytorch·rnn·深度学习
番茄老夫子1 小时前
OpenAI推出的语音识别系统Whisper简析
人工智能·whisper·语音识别
铸剑师欧冶子1 小时前
AI领域的黄埔军校:OpenAI是新一代的PayPal Mafia,门生故吏遍天下
人工智能·深度学习·机器学习·gpt-3·文心一言
前网易架构师-高司机1 小时前
手机识别数据集,2628张原始图片,支持yolo,coco json,pasical voc xml等格式的标注
人工智能·手机·数据集
GitLqr1 小时前
AI洞察 | 一周动态: Manus 裁员、Kimi K2 开源、混元 3D 创作、Qwen Chat 桌面客户端
人工智能·agent·ai编程