Day 1: PyTorch 基础学习计划
日期:2026-06-12
今天的目标:建立 PyTorch 训练的基本手感。不要追求学完很多概念,今天只要把一条最小训练链路跑通,并能说清楚每一步在干什么。
今天的核心句子:
tensor 装数据,model 做预测,loss 衡量错得多离谱,backward 算梯度,optimizer 根据梯度改参数。
如果今天结束时能用自己的话讲清楚这句话,并跑通一个线性回归脚本,就算完成。
今日主线
- 理解 tensor、矩阵运算、参数、loss、梯度、反向传播。
- 学会 PyTorch 里的
requires_grad、backward()、.grad。 - 亲手跑通
forward -> loss -> backward -> optimizer.step()。 - 完成两个代码任务:autograd 练习 + 线性回归。
- 写一页笔记,回答训练循环相关的 5 个核心问题。
建议目录
D:\code\DL-study\
notes\
day01-plan.md
day01-pytorch-basics.md
src\
day01_tensor_autograd.py
day01_linear_regression.py
experiments\
day01\
学习资料
今天只用下面 3 类资料,不要再扩展太多。
-
PyTorch 官方 Learn the Basics
https://docs.pytorch.org/tutorials/beginner/basics/ -
《动手学深度学习》中文版
https://zh.d2l.ai/index.html -
动手学深度学习课程页
https://courses.d2l.ai/zh-v2/
重点章节:
- PyTorch 官方:
Tensors - PyTorch 官方:
Automatic Differentiation with torch.autograd - D2L:2.5 自动微分
https://zh.d2l.ai/chapter_preliminaries/autograd.html - D2L:3.1 线性回归
https://zh.d2l.ai/chapter_linear-networks/linear-regression.html - D2L:3.2 线性回归的从零开始实现
https://zh.d2l.ai/chapter_linear-networks/linear-regression-scratch.html - D2L:3.3 线性回归的简洁实现
https://zh.d2l.ai/chapter_linear-networks/linear-regression-concise.html
3 小时标准版
第 1 段:理论预热,60 分钟
这一段只学今天写代码马上会用到的东西。
1. Tensor 是什么,15 分钟
看 PyTorch 官方基础教程里的 Tensors 部分。
只关注:
- tensor 和 Python list / NumPy array 的关系。
- shape:比如
(100, 1)、(32, 784)是什么意思。 - 加法、乘法、矩阵乘法。
dtype。requires_grad。
最低掌握标准:
深度学习里的数据、参数、梯度,基本都以 tensor 的形式存在。
2. 自动微分 / autograd,20 分钟
看 D2L 2.5 自动微分,再配合 PyTorch 官方 autograd 教程。
重点理解:
requires_grad=True:告诉 PyTorch 这个变量需要求梯度。backward():从结果往回算梯度。.grad:保存梯度结果。- 计算图:PyTorch 会记录 tensor 是怎么一步步算出来的。
最低掌握标准:
定义
y = x ** 2 + 2 * x + 1,调用y.backward()后,PyTorch 能自动算出 y 对 x 的导数。
3. 线性回归,15 分钟
看 D2L 3.1 线性回归。
重点理解:
- 输入
x - 标签
y - 参数
w和b - 预测值
y_hat = xw + b - 平方损失 MSE
- 训练目标:让预测值尽量接近真实值
最低掌握标准:
线性回归就是让模型自己学出一条线,比如从数据里学出
y ≈ 3x + 2。
4. 训练循环,10 分钟
快速看 D2L 3.2 和 3.3,重点盯住这条链:
准备数据
-> 模型预测
-> 计算 loss
-> optimizer.zero_grad()
-> loss.backward()
-> optimizer.step()
注意:很多教程会把 zero_grad() 放在 backward() 前面。今天建议记成:
每次反向传播前,先清空上一轮梯度。
第 2 段:tensor 和 autograd 练习,40 分钟
创建文件:
D:\code\DL-study\src\day01_tensor_autograd.py
练习内容:
- 创建两个矩阵,做加法。
- 做逐元素乘法。
- 做矩阵乘法。
- 创建一个带
requires_grad=True的变量。 - 定义简单函数
y = x ** 2 + 2 * x + 1。 - 调用
y.backward()。 - 打印
x.grad。
最小示例:
import torch
x = torch.tensor(2.0, requires_grad=True)
y = x ** 2 + 2 * x + 1
y.backward()
print("x:", x.item())
print("y:", y.item())
print("dy/dx:", x.grad.item())
你要能解释:
y = x^2 + 2x + 1dy/dx = 2x + 2- 当
x = 2时,梯度是6 - 所以
x.grad应该接近6
第 3 段:PyTorch 线性回归,80 分钟
创建文件:
D:\code\DL-study\src\day01_linear_regression.py
任务目标:
用 PyTorch 构造模拟数据:
y = 3x + 2 + noise
然后让模型自己学出接近 3 的权重和接近 2 的偏置。
代码需要包含:
- 构造输入
x - 构造标签
y - 定义
nn.Linear(1, 1) - 使用
nn.MSELoss() - 使用
torch.optim.SGD或torch.optim.Adam - 训练 200-500 步
- 打印 loss、weight、bias
训练循环结构:
for step in range(num_steps):
y_pred = model(x)
loss = loss_fn(y_pred, y)
optimizer.zero_grad()
loss.backward()
optimizer.step()
今天最重要的是看懂这条链:
输入数据 -> 模型预测 -> 计算 loss -> 清空旧梯度 -> 反向传播 -> 更新参数
第 4 段:整理笔记,30 分钟
创建或填写文件:
D:\code\DL-study\notes\day01-pytorch-basics.md
回答下面 5 个问题:
loss.backward()做了什么?optimizer.step()做了什么?- 为什么训练前要
optimizer.zero_grad()? - 为什么 loss 下降不代表模型一定有泛化能力?
- 如果 loss 不下降,应该先检查哪些地方?
5-6 小时增强版
如果今天时间更充足,在 3 小时标准版基础上增加下面内容。
增强 1:理论预热扩展到 90 分钟
额外补充:
- D2L 3.2 线性回归的从零开始实现。
- D2L 3.3 线性回归的简洁实现。
- 动手学深度学习课程页里的“自动求导”“线性回归”相关视频。
这 30 分钟不是为了背公式,而是为了对比两种实现方式:
- 从零开始实现:更容易理解训练到底在做什么。
- 简洁实现:更接近以后真实项目里写 PyTorch 的方式。
增强 2:对比不同学习率
分别尝试:
learning_rate = 0.001
learning_rate = 0.01
learning_rate = 0.1
观察:
- 哪个 loss 下降最快?
- 哪个 loss 几乎不下降?
- 哪个 loss 可能震荡甚至变大?
把现象记录到:
D:\code\DL-study\experiments\day01\
增强 3:对比不同训练步数
分别尝试:
num_steps = 100
num_steps = 500
num_steps = 1000
观察:
- 训练步数增加后,loss 是否继续下降?
- weight 是否更接近
3? - bias 是否更接近
2? - 到什么程度后继续训练收益变小?
增强 4:故意制造错误
尝试下面任意一个错误:
- 忘记调用
optimizer.zero_grad()。 - 把学习率调得特别大,比如
1.0。 - 把输入和标签维度写错。
- 把 loss 写成不合理的形式。
记录:
- 错误现象是什么?
- 报错信息是什么?
- loss 如何变化?
- 最后是怎么定位问题的?
今天不要学这些
- 不要深入推导反向传播公式。
- 不要学 CNN。
- 不要学 Transformer。
- 不要看完整概率论。
- 不要纠结 Adam 优化器的内部细节。
- 不要一口气看完整个 PyTorch 文档。
今日验收标准
今天结束时,你应该能做到:
- 能说清楚一次训练循环的 6 步:准备数据、前向计算、计算 loss、清空旧梯度、反向传播、更新参数。
- 能运行一个 PyTorch 线性回归脚本。
- 能看懂
model.parameters()。 - 能解释
loss.backward()的作用。 - 能解释
optimizer.step()的作用。 - 能解释为什么模型可以通过梯度学习参数。
- 能初步判断 loss 不下降时该查数据、模型、loss、学习率还是训练循环。
今日重点提醒
今天别贪多。把这条小小的训练链路真正跑顺,后面 MNIST、CNN、Transformer 都是在这条链路上加复杂度。
更多推荐


所有评论(0)