PyTorch2 Python深度学习 - 自动微分(Autograd)与梯度优化

锋哥原创的PyTorch2 Python深度学习视频教程:

https://www.bilibili.com/video/BV1eqxNzXEYc

课程介绍

​基于前面的机器学习Scikit-learn,深度学习Tensorflow2课程,我们继续讲解深度学习PyTorch2,所以有些机器学习,深度学习基本概念就不再重复讲解,大家务必学习好前面两个课程。本课程主要讲解基于PyTorch2的深度学习核心知识,主要讲解包括PyTorch2框架入门知识,环境搭建,张量,自动微分,数据加载与预处理,模型训练与优化,以及卷积神经网络(CNN),循环神经网络(RNN),生成对抗网络(GAN),模型保存与加载等。

PyTorch2 Python深度学习 - 自动微分(Autograd)与梯度优化

在PyTorch2中, 自动微分(Autograd)机制, 是 PyTorch 的核心功能之一,用于自动计算张量的导数(梯度)。

它的主要用途是:在神经网络反向传播过程中自动计算参数的梯度

在 PyTorch 中,只要一个张量的属性 requires_grad=True,系统就会跟踪它的所有运算,从而可以在反向传播时自动求出梯度。

基本原理

  • 计算图(Computational Graph): PyTorch 会动态构建一张有向无环图(DAG),图的节点是张量,边是函数(如加法、乘法等)。 反向传播时,PyTorch 会沿着这张图从输出向输入依次计算梯度。

  • 反向传播(Backpropagation) : 调用 loss.backward() 时,PyTorch 会自动计算所有参与计算的 requires_grad=True 张量的梯度。

  • 梯度存储 : 计算出的梯度会存放在每个张量的 .grad 属性中。

简单示例

复制代码
import torch

# 创建一个张量并启用自动求导
x = torch.tensor(3.0, requires_grad=True)

# 构建一个函数 y = x^2
y = x ** 2

# 自动求导(反向传播)
y.backward()

# 查看梯度 dy/dx
print(x.grad)  # 输出:tensor(6.)
print(x.grad.item())

运行输出:

复制代码
tensor(6.)
6.0

神经网络训练中使用 Autograd

复制代码
import torch
from torch import nn, optim

# 1,构造训练数据:y=2x+1
x = torch.linspace(-5, 5, 100).unsqueeze(1)  # 100的样本,维度[100,1]
print(x, x.shape)
y = 2 * x + 1 + torch.randn(x.size())  # 添加噪声

# 2,定义简单的线性模型
model = nn.Linear(1, 1)

# 3, 定义损失函数与优化器
criterion = nn.MSELoss()  # 均方误差
optimizer = optim.SGD(model.parameters(), lr=0.01)

# 4,训练模型
epochs = 2000
for epoch in range(epochs):
    y_pred = model(x)  # 前向传播
    loss = criterion(y_pred, y)  # 计算损失
    optimizer.zero_grad()  # 清空梯度
    loss.backward()  # 反向传播
    optimizer.step()  # 更新参数

    print(f'epoch: {epoch}, loss: {loss.item()}')

# 5,查看结果
[w, b] = model.parameters()
print(f'训练结果:w: {w}, b: {b}')

流程说明:

  1. forward() 前向传播,构建计算图

  2. loss.backward() 反向传播,自动求出参数梯度

  3. optimizer.step() 更新模型参数

相关推荐
东宇科技11 小时前
如何使用js进行抠图。识别商品主体
开发语言·javascript·ecmascript
克里普crirp11 小时前
电离层TEC地图中添加晨昏线/昼夜转换线
python
Dxy123931021611 小时前
Python使用PyEnchant详解:打造高效拼写检查工具
开发语言·python
张二娃同学11 小时前
Claude Code 使用教程:下载安装、CC Switch 配置、MiniMax API 获取与启动实操
人工智能·windows·深度学习·github·claude code
网域小星球11 小时前
C 语言从 0 入门(十五)|综合小项目:菜单交互与简易功能实现
c语言·开发语言·交互
架构师老Y11 小时前
011、消息队列应用:RabbitMQ、Kafka与Celery
python·架构·kafka·rabbitmq·ruby
网域小星球12 小时前
C 语言从 0 入门(十六)|动态内存管理:malloc /free/calloc /realloc 精讲
c语言·开发语言·free·malloc·动态内存
枫叶林FYL12 小时前
【Python高级工程与架构实战】项目四:生产级LLM Agent框架:基于PydanticAI的类型安全企业级实现
人工智能·python·自然语言处理
龙腾AI白云12 小时前
多模大模型应用实战:智能问答系统开发
python·机器学习·数据分析·django·tornado
雪的季节12 小时前
qt信号槽跨线程使用时候的坑
java·开发语言·qt