PyTorch 张量与 Autograd
torch.Tensor、requires_grad、backward()、梯度计算和张量运算。
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.float32tensor 运算
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 multiplyrequires_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 反馈 — 无需本地设置。
此课程中的所有课时
- PyTorch 张量与 Autograd
- 自定义数据集与 DataLoaders
- 在 PyTorch 中构建并训练 CNN
- 使用 YOLOv8 进行目标检测