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

相关推荐
哈基米喜欢哈哈哈31 分钟前
Kafka复制机制
笔记·分布式·后端·kafka
麻雀无能为力35 分钟前
python自学笔记14 NumPy 线性代数
笔记·python·numpy
金井PRATHAMA1 小时前
大脑的藏宝图——神经科学如何为自然语言处理(NLP)的深度语义理解绘制新航线
人工智能·自然语言处理
大学生毕业题目1 小时前
毕业项目推荐:28-基于yolov8/yolov5/yolo11的电塔危险物品检测识别系统(Python+卷积神经网络)
人工智能·python·yolo·cnn·pyqt·电塔·危险物品
星期天要睡觉1 小时前
深度学习——卷积神经网络CNN(原理:基本结构流程、卷积层、池化层、全连接层等)
人工智能·深度学习·cnn
哈基鑫2 小时前
支持向量机(SVM)学习笔记
人工智能·机器学习·支持向量机
fsnine2 小时前
深度学习——优化函数
人工智能·深度学习·cnn
竹杖芒鞋轻胜马,夏天喜欢吃西瓜3 小时前
二叉树学习笔记
数据结构·笔记·学习
2501_924877213 小时前
强逆光干扰漏检率↓78%!陌讯多模态融合算法在光伏巡检的实战优化
大数据·人工智能·算法·计算机视觉·目标跟踪
算家计算3 小时前
多模态融合新纪元:Ovis2.5 本地部署教程,实现文本、图像与代码的深度协同推理
人工智能·开源