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

相关推荐
Sui_Network3 分钟前
Sui Stack Messaging SDK:为 Web3 打造可编程通信
大数据·人工智能·科技·web3·去中心化·区块链
金井PRATHAMA6 分钟前
GraphRAG对自然语言处理中深层语义分析的革命性影响与未来启示
人工智能·自然语言处理·知识图谱
人工智能培训8 分钟前
Transformer-位置编码(Position Embedding)
人工智能·深度学习·大模型·transformer·embedding·vision
峰顶听歌的鲸鱼14 分钟前
30.Linux DHCP 服务器
linux·运维·服务器·笔记·学习方法
丰年稻香17 分钟前
神经网络二分类任务详解:前向传播与反向传播的数学计算
人工智能·神经网络·分类
Lethehong28 分钟前
DeepSeek-V3.1-Terminus:蓝耘API+CherryStudio实测国产最新开源模型,推理能力竟让我后背发凉
人工智能·大模型·deepseek·蓝耘元生代·蓝耘maas·ai ping
咖啡星人k31 分钟前
AI 大模型驱动的开源知识库搭建系统 PandaWiki的网页挂件机器人教程
人工智能·机器人·开源
QYR_1132 分钟前
机器人定位器市场报告:2025-2031 年行业增长逻辑与投资机遇解析
大数据·人工智能
一只小风华~36 分钟前
Vue Router 命名路由学习笔记
前端·javascript·vue.js·笔记·学习·ecmascript
我是个菜鸡.38 分钟前
视觉/深度学习/机器学习相关面经总结(3)(持续更新)
人工智能·深度学习·机器学习