结业考核
这是本书过程化考核的最后一环,由两部分组成:综合项目与结业测验。全部完成后,你应当能脱离任何 AI 工具独立使用 PyTorch 完成数据建模,并读懂、验证 AI 生成的代码——这正是本书的两个核心目标。
一、综合项目
从下面三个主题中任选一个,独立完成。也可以自拟同等难度的主题,但必须先按第 12 章 12.5 的审查清单自评。
主题 A:房价回归预测
- 合成或真实数据集(合成须说明生成公式),特征至少 2 维(如面积、房间数、楼层);
- 划分训练/验证集,用 MLP 回归,输出 RMSE 曲线;
- 保存最优模型,加载后对「新房子」做预测并输出;
- 对 AI 生成的回归训练代码做一次审查,列出修复点。
主题 B:图片二分类器
- 合成数据:两类有明显差异的 28×28 灰度图(如明暗、左右半边、图形位置);
- 用第 10 章风格的自定义 CNN 训练,每轮打印 train/val 准确率;
- 保存最优
state_dict并加载复验; - 用
ToTensor把 3 张 NumPy 图片预处理后送入模型,输出预测类别。
主题 C:AI 代码审查报告
- 让 AI 生成一段「用 DataLoader 训练 CNN 分类 1000 张图」的完整代码;
- 定位并修复其中至少 4 个问题(可涵盖:dtype、形状、设备、
zero_grad、eval/no_grad、state_dict结构); - 每个问题写清:现象(报错或异常行为)、原因、修复前后代码;
- 修复后完整训练并输出验证准确率。
统一验收标准(全部满足才算通过):
| 标准 | 说明 |
|---|---|
| 可运行 | 按 README 或注释说明可一键运行,无语法错误 |
| 有注释 | 关键函数有注释,说明「为什么」 |
| 有容错 | 空文件、缺失值、异常值不会导致程序崩溃 |
| 结构清晰 | 用函数组织代码,没有大段重复 |
| 有评估 | 训练/验证集划分明确,输出评估指标 |
| 可复现 | 随机种子固定,重跑结果一致 |
| 有保存 | 模型保存并可加载复验 |
二、结业测验
覆盖第 1~12 章知识点,共 15 题,答对 12 题(80%)以上视为通过。
torch.tensor([1, 2, 3]).shape的结果是?(第 1 章)- A.
3 - B.
torch.Size([3]) - C.
torch.Size([1, 3]) - D.
[3]
- A.
- PyTorch 默认浮点 dtype 是?(第 1 章)
- A.
float64 - B.
float32 - C.
int64 - D.
float16
- A.
torch.linspace(0, 1, 5)的结果是?(第 2 章)- A.
tensor([0., 0.2, 0.4, 0.6, 0.8, 1.]) - B.
tensor([0., 0.25, 0.5, 0.75, 1.]) - C.
tensor([0., 0.5, 1.]) - D. 报错
- A.
- 下列哪种方式得到的是视图?(第 3 章)
- A.
a.clone() - B.
a[1:3] - C.
torch.tensor(a) - D.
a[torch.tensor([0, 2])]
- A.
torch.tensor([10, 20, 30, 40, 50])[::-1]会?(第 3 章)- A. 返回倒序张量
- B. 报
ValueError: step must be greater than zero - C. 返回空张量
- D. 返回列表
- 矩阵乘法应使用哪个运算符?(第 4 章)
- A.
* - B.
@ - C.
& - D.
#
- A.
- 形状
(2, 3)与(3,)的张量相加,结果形状是?(第 4 章)- A.
(2,) - B.
(2, 3) - C.
(3, 2) - D. 报错
- A.
- 对不连续张量调用
view(-1)会?(第 5 章)- A. 正常返回
- B. 报
RuntimeError,建议用reshape - C. 自动复制
- D. 返回空张量
torch.stack([a, b], dim=0)与torch.cat([a, b], dim=0)的区别是?(第 5 章)- A. 没有区别
- B.
stack新增一个维度,cat沿已有维度拼接 - C.
cat新增一个维度 - D.
stack要求形状不同
x = torch.tensor(3.0, requires_grad=True); y = x ** 2; y.backward(); x.grad是?(第 6 章)- A.
tensor(9.) - B.
tensor(6.) - C.
tensor(3.) - D.
tensor(2.)
- A.
- 每次
backward()后梯度默认会?(第 6 章)- A. 自动清零
- B. 累加
- C. 变成 None
- D. 变成随机数
- 分类任务通常使用哪个损失函数?(第 8 章)
- A.
MSELoss - B.
CrossEntropyLoss - C.
L1Loss - D.
HuberLoss
- A.
DataLoader(ds, batch_size=4)处理 10 个样本,产生几批?(第 9 章)- A. 2
- B. 3
- C. 4
- D. 10
nn.Conv2d(1, 4, kernel_size=3, padding=1)对(8, 1, 28, 28)输入,输出形状是?(第 10 章)- A.
(8, 4, 28, 28) - B.
(8, 4, 26, 26) - C.
(8, 1, 28, 28) - D.
(4, 8, 28, 28)
- A.
- 评估模型时,正确做法是?(第 11 章)
- A.
model.train()+torch.no_grad() - B.
model.eval()+torch.no_grad() - C. 只调
model.eval() - D. 什么都不用调
- A.
三、结业评审
- 综合项目:对照验收标准逐条自评;如果可能,请另一位同学或老师运行你的程序。
- 结业测验:15 题答对 12 题以上。
- 两项都通过,即完成本书全部学习目标。
结业后的下一步
本书覆盖的是 PyTorch 核心。之后可以按兴趣深入:
- 数据与可视化:
pandas、matplotlib(配合张量分析数据) - 经典模型:
torchvision自带模型(ResNet 等)与预训练权重、torchvision.datasets(MNIST、CIFAR) - 自然语言处理:
transformers(Hugging Face)、torchtext - 训练技巧:学习率调度、正则化(Dropout、Weight Decay)、BatchNorm、迁移学习
- 部署:
torch.compile、ONNX导出、TensorRT
无论选哪个方向,记住本书的两条原则:独立写出能跑的向量化代码,读懂并验证别人(包括 AI)写的代码。
