郭震 AI公众号:郭震AI

9 使用torch.autograd实现自动求导

发布日期:

最近更新:

分类: Pytorch小白

预计阅读: 4 分钟

阅读次数: 0

预计阅读4 分钟
结构重点9 个
图文要点6 张
正文规模1.5k 字

整理说明

这篇内容怎么整理

郭震 · 2026-06-04

独立整理围绕 9 个结构重点拆成环境、步骤、验证点和常见误区,尽量让读者能照着复现。
图文对照保留 6 张和配置、流程、判断结果有关的图片,方便快速定位正文重点。
持续校对工具、模型和命令变化较快,后续优先修正入口、参数和风险提醒。

阅读路线

先按这条路线读

先抓住主线,再回到代码、配置和图文细节,读起来会更稳。

图文要点

先看本文图文节点

按图先建立主线,再跳回正文核对步骤、配置和判断标准。

使用 autograd 做线性回归流程图查看大图
使用 autograd 做线性回归流程图

线性回归是理解 autograd 的好例子。它把模型训练拆成最小闭环:预测、算错、求梯度、更新参数。

使用 autograd 做线性回归核对图查看大图
使用 autograd 做线性回归核对图

训练时我会特别检查 optimizer.zero_grad() 是否在每轮执行。忘记清零梯度,会让参数更新变得不可控。

在上一篇中,我们讨论了自动求导的基本概念,了解了什么是自动求导,以及它在深度学习中扮演的重要角色。本篇将深入探讨如何使用PyTorch中的torch.autograd模块实现自动求导,并通过实战案例来帮助大家更好地理解这一过程。

什么是torch.autograd?

torch.autograd是PyTorch中用于实现自动求导的核心包。它能够根据操作记录自动计算梯度,这使得我们可以轻松地进行反向传播(Backpropagation),进而优化模型。在此过程中,torch.autograd会构建一个计算图,图中的节点是张量,而边则表示它们之间的操作关系。

torch.autograd求导判断卡查看大图
torch.autograd求导判断卡

使用 torch.autograd 时,先确认 requires_grad、前向计算、损失标量、backward 调用和梯度读取。

使用自动求导的基本步骤

在使用torch.autograd时,主要的步骤如下:

PyTorch阅读地图卡查看大图
PyTorch阅读地图卡

进入《使用torch.autograd实现自动求导》正文前,可以先扫一遍配图:它在问什么、要分清哪些概念、哪一步值得动手、最后用什么标准验收。

  1. 创建张量:我们需要先创建需要计算梯度的张量,并设置其属性requires_grad=True
  2. 构建计算图:对创建的张量进行各种操作以生成新张量。
  3. 反向传播:通过调用.backward()方法自动计算梯度。
  4. 访问梯度:可以通过.grad属性来访问计算得到的梯度。

案例:简单的线性回归

为了更好地理解torch.autograd的实现,我们通过一个简单的线性回归案例来演示自动求导过程。

数据准备

我们首先生成一些线性数据作为训练集。考虑一个简单的线性方程:

y=2x+1y = 2x + 1

我们在此基础上加入一些随机噪声来模拟实际数据。以下是数据准备的代码:

import torch
import numpy as np
import matplotlib.pyplot as plt

# 设置随机种子
torch.manual_seed(42)

# 生成数据
x = torch.linspace(0, 1, 100).reshape(-1, 1)  # 100个数据点
y = 2 * x + 1 + torch.randn(x.size()) * 0.1  # y = 2x + 1 + 噪声

# 可视化数据
plt.scatter(x.numpy(), y.numpy(), color='blue')
plt.xlabel('x')
plt.ylabel('y')
plt.title('Generated Data')
plt.show()

构建模型

接下来,我们构建一个简单的线性回归模型。这里我们使用torch.nn.Linear来创建一个线性层。

import torch.nn as nn

# 定义线性模型
model = nn.Linear(1, 1)  # 输入是1维,输出也是1维

定义损失函数和优化器

我们使用均方误差(MSE)作为损失函数,并使用随机梯度下降(SGD)作为优化器:

# 定义损失函数和优化器
criterion = nn.MSELoss()
optimizer = torch.optim.SGD(model.parameters(), lr=0.01)

训练模型

现在,我们将进行模型的训练。在每个训练周期中,我们需要执行以下步骤:

  1. 正向传播:计算预测值。
  2. 计算损失:使用损失函数计算损失。
  3. 反向传播:调用.backward()来计算梯度。
  4. 更新参数:使用优化器更新模型参数。

以下是训练过程的代码:

# 训练模型
num_epochs = 200

for epoch in range(num_epochs):
    # 正向传播
    outputs = model(x)  # 计算预测
    loss = criterion(outputs, y)  # 计算损失

    # 反向传播
    optimizer.zero_grad()  # 清零之前的梯度
    loss.backward()  # 计算梯度
    optimizer.step()  # 更新参数

    if (epoch+1) % 20 == 0:
        print(f'Epoch [{epoch+1}/{num_epochs}], Loss: {loss.item():.4f}')

可视化结果

训练完成后,我们可以可视化模型的预测结果:

# 可视化结果
with torch.no_grad():  # 在这个上下文中不需要计算梯度
    predicted = model(x)

plt.scatter(x.numpy(), y.numpy(), color='blue')
plt.plot(x.numpy(), predicted.numpy(), color='red', linewidth=2)
plt.xlabel('x')
plt.ylabel('y')
plt.title('Linear Regression Result')
plt.legend(['Predicted', 'Original'])
plt.show()
使用torch.autograd实现自动求导应用复盘卡查看大图
使用torch.autograd实现自动求导应用复盘卡

复习《使用torch.autograd实现自动求导》时,建议把关键概念、操作步骤和可见结果放在同一页里回看。

使用torch.autograd实现自动求导应用检查卡查看大图
使用torch.autograd实现自动求导应用检查卡

练习《使用torch.autograd实现自动求导》时,建议把输入条件、处理动作和可见结果写在一起,方便下次复查。

总结

通过以上的案例,我们展示了如何使用torch.autograd实现自动求导,了解了它的基本使用流程和在训练神经网络中应用的重要性。在深度学习的实际应用中,自动求导是极为关键的工具,它简化了我们对模型梯度的计算,从而使得模型训练更加高效。

在下一篇中,我们将继续探讨神经网络基础,介绍神经网络的基本结构,为您进一步理解深度学习奠定基础。

继续阅读

从这篇继续找到相关教程

AI 教程总索引

常见问题

读前先确认这三点

使用torch.autograd实现自动求导适合谁读?

这是 PyTorch 入门 系列第 9 / 20 篇,适合正在学习PyTorch 入门,并且需要把概念落到操作步骤或判断标准里的读者。

读这篇PyTorch 入门教程要多久?

按中文技术文章阅读速度估算,通读大约 4 分钟;如果要跟着复现,建议把命令、配置和结果检查分开做。

这篇文章里的图文节点怎么用?

正文里有 6 个图文节点,可以先用它们抓住流程、配置和判断点,再回到对应段落细读。

分享文章

转发到常用平台

微信/朋友圈可先复制链接

相关教程

AI 教程总索引

继续阅读

继续找到相关 AI 教程

返回栏目

Reader Messages

读者留言

有问题、补充资料或实测结果,可以直接留下。这里不需要登录。

最多 800 字

为了防刷,每条留言会做长度、链接数量和提交频率限制。

0/800

留言列表

0
正在加载留言...