Learn AI with Python · 课时

PyTorch 张量与 Autograd

torch.Tensor、requires_grad、backward()、梯度计算和张量运算。

第 1 / 4 课13 个步骤

PyTorch 张量与 Autograd 是 CoddyKit 上的免费 Learn AI with Python 课时。 这是第 1 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Learn AI with Python 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Learn AI with Python 课程共包含 4 节课。

什么是 PyTorch?

PyTorch 是一种围绕 tensor 构建的深度学习框架;tensor 是支持 GPU 加速和自动微分的多维数组。您必须首先掌握的两个支柱是 tensor 和自动微分。

pip install torch

import torch

创建 tensor

tensor 类似于 NumPy 数组,但可以驻留在 GPU 上并跟踪梯度。使用 torch.tensor 创建 tensor。Tensor 具有 shape 和 dtype。

x = torch.tensor([1.0, 2.0, 3.0])
print(x.shape)   # torch.Size([3])
print(x.dtype)   # torch.float32

tensor 运算

Tensor 支持逐元素数学运算、矩阵乘法和重塑。运算经过向量化处理,可以在硬件上快速运行。这是每个神经网络的计算基础。

a = torch.tensor([[1.0, 2.0], [3.0, 4.0]])
b = torch.tensor([[5.0, 6.0], [7.0, 8.0]])
print(a + b)
print(a @ b)  # matrix multiply

requires_grad:跟踪梯度

要计算梯度,请使用 requires_grad=True 创建 tensor。随后,PyTorch 会记录对它执行的每次运算,构建一个稍后可以进行求导的计算图。

x = torch.tensor([2.0, 3.0], requires_grad=True)
print(x.requires_grad)  # True

构建计算过程

对跟踪梯度的 tensor 应用运算,生成一个标量输出。在这里,我们对每个元素求平方并求和,得到一个可以相对于 x 求导的单一数值。

x = torch.tensor([2.0, 3.0], requires_grad=True)
y = x.pow(2).sum()   # y = x0^2 + x1^2
print(y)             # tensor(13., grad_fn=...)

调用 backward()

对标量调用 .backward(),通过反向传播计算梯度。PyTorch 会反向遍历记录的计算图,并自动填充导数。

y.backward()

读取 .grad

调用 backward() 后,每个输入 tensor 都会在 .grad 中保存其梯度。对于 y = sum(x^2),导数是 2x,因此梯度为 [4, 6]。

print(x.grad)  # tensor([4., 6.])

梯度会累积

这里有一个容易忽略的问题:多次调用 backward() 时,梯度会累加。在训练循环中,您必须在每个 step 中使用 x.grad.zero_() 或优化器的 zero_grad() 将梯度清零。

x.grad.zero_()  # reset before the next backward()

使用 torch.no_grad() 进行推理

推理期间不需要梯度,跟踪梯度只会浪费内存。将预测代码放在 with torch.no_grad(): 中,以禁用计算图构建并提高运行速度。

with torch.no_grad():
    preds = x.pow(2).sum()
    print(preds.requires_grad)  # False

使用 detach() 停止梯度流动

.detach() 会返回一个与原 tensor 共享数据、但已从计算图中分离的 tensor。使用它可以在不让梯度通过某个值反向传播的情况下使用该值,例如进行日志记录或冻结网络的一部分。

z = x.detach()
print(z.requires_grad)  # False

自动微分为何重要

自动微分让深度学习变得实用:您定义前向计算,PyTorch 会自动为反向传播推导梯度。您编写的每个训练循环都建立在 requires_grad、backward 和 .grad 之上。

快速检查

检验您对自动微分的理解。

回顾:tensor 与自动微分

您使用 torch.tensor 创建了 tensor,并通过 requires_grad=True 启用了梯度跟踪。您计算了输出,运行了 .backward(),并从 .grad 中读取了导数。您了解了梯度会累积,使用 torch.no_grad() 进行推理,并使用 .detach() 切断梯度流动。

免费开始

用 AI 导师学习 Python — 免费

在浏览器中编写并运行真实代码,获得全天候 AI 导师的即时帮助,并在网页或应用中继续学习。

课程
53
课程
225

常见问题解答

「PyTorch 张量与 Autograd」课时是免费的吗?

是的 — 「PyTorch 张量与 Autograd」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Learn AI with Python 课程的其余内容,请升级到 CoddyKit PRO。 Learn AI with Python 课程共包含 4 节课。

「PyTorch 张量与 Autograd」这节课中我会学到什么?

torch.Tensor、requires_grad、backward()、梯度计算和张量运算。 你通过在浏览器中直接运行的动手代码来练习 Learn AI with Python,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Learn AI with Python 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Learn AI with Python 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 4 节。

「PyTorch 张量与 Autograd」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Learn AI with Python 课中编写并运行代码吗?

能。每节 Learn AI with Python 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. PyTorch 张量与 Autograd
  2. 自定义数据集与 DataLoaders
  3. 在 PyTorch 中构建并训练 CNN
  4. 使用 YOLOv8 进行目标检测
← 返回 Learn AI with Python