第 24 章练习与答案
🌈 关于《AI 零基础 36 讲》课后训练
📚与正式讲解配套学习
本篇是《AI 零基础 36 讲》的配套课后训练,与对应章节的正式讲解一起使用。整个系列面向初学者,从日常 AI
使用逐步进入编程、模型训练和大模型应用开发。✍️先独立作答,再核对答案
训练围绕本章知识安排概念判断、结果分析或动手任务,并提供参考答案与解释。建议先读完对应的正式文章,再独立作答;遇到困难时回看相关例子,最后核对答案。
💻代码题请亲手运行
观察程序输出,确认自己能解释结果、发现错误并完成修复。做完一道题,也要弄清答案为什么成立。
题目
- 图中的 4×4 输入、2×2 核,步长 1、无填充,输出为什么是 3×3。第二行第二列输出是多少。
- 最大池化得到
[[3,2],[1,2]]后,还能恢复输入的每个像素吗。 - 卷积层有 8 个 3×3 核,输入一个灰度通道,每个输出通道一个偏置。参数有多少,是否随图片位置重复增加。
- 为什么源任务的十类分类头需要替换。奇偶答案能由标签求余得到,是否可以把真实数字标签也喂给目标模型。
- 冻结模型时有哪些参数仍需更新。解冻后为什么重新建立优化器。
- 微调比从头训练多答对两张,能否得出迁移总是更好、更快。至少指出两项实验限制。
参考答案
1. 输出格数
每个方向有4-2+1=3个完整窗口。第二行第二列覆盖[[3,0],[0,2]],输出为3-2=1。这里核没有翻转。全部九格见计算表。
| row | column | top_left | bottom_right | output |
|---|---|---|---|---|
| 0 | 0 | 1 | 3 | -2 |
| 0 | 1 | 0 | 0 | 0 |
| 0 | 2 | 2 | 1 | 1 |
| 1 | 0 | 0 | 0 | 0 |
| 1 | 1 | 3 | 2 | 1 |
| 1 | 2 | 0 | 0 | 0 |
| 2 | 0 | 1 | 1 | 0 |
| 2 | 1 | 0 | 0 | 0 |
| 2 | 2 | 2 | 2 | 0 |
fromexamples.conv_coreimportTEACHING_IMAGE,TEACHING_KERNEL,manual_correlation result=manual_correlation(TEACHING_IMAGE,TEACHING_KERNEL)print(result.shape,result[1,1])输出为(3, 3) 1.0。
2. 池化的信息
不能恢复。最大值没有记录同一区域中其他三个值,也没有保留最大值原来在区域的哪个位置。本章没有返回最大值索引。
3. 卷积参数
每个核有 9 个权重,总参数为(1×3×3+1)×8=80。这些权重在各位置共享,不按扫描窗口数量再乘一遍。
importtorch layer=torch.nn.Conv2d(1,8,3,padding=1)print(sum(p.numel()forpinlayer.parameters()))输出为80。
4. 目标头和标签
源头有十类,目标只有偶数与奇数两类,目标编号对应关系已经变化。应复制特征部分并新建二类头。把真实数字标签作为输入会直接提供答案线索,破坏从图片预测的任务。标签求余只用于数据编制与核对。
5. 更新范围
冻结特征时保留新头可求导,更新 66 个参数。微调时允许全部 4274 个参数更新。若旧优化器只收到分类头,解冻特征不会自动把它们加进优化器。本章显式重新建立优化器,并使用较低学习率。
6. 结果限制
这次固定划分只看到微调多答对两张,冻结迁移还少答对一张。单次实验没有验证跨种子的稳定性。迁移另用了 1000 张源图片和 30 轮预训练,完整成本并非只有目标阶段。源任务和目标任务仍属于同一图片家族,也不能据此说明可以迁移到宠物照片等差异很大的场景。