日期:2026-11-10 | 用途:每次改动实验,复制下面的表格填一行。三个月后这份记录就是你的"实验日志",价值超过任何教程。 填写纪律:一次只改一个变量;先写下"预期"再跑(猜错了学得更多);跑完必填"解读"。
观察记录表
| # | 改了什么 | 我的预期 | 实际命令 | loss | 准确率 | 耗时 | 解读(为什么是这个结果?) |
|---|---|---|---|---|---|---|---|
| 0 | 无(基线:500样本/1epoch/seed42/lr=1e-3) | - | --smoke |
2.2579 | 40.70% | 8.0s | loss≈ln10=2.3,500样本几乎没学会 |
| 1 | |||||||
| 2 | |||||||
| 3 |
预排的三次实验(照着做,填进上表)
实验 1:换随机种子(5 分钟)
- 改动:脚本里
torch.manual_seed(42)→torch.manual_seed(7) - 预期先写:结果会一样还是不一样?为什么?
- 跑:
.venv/Scripts/python.exe 01_mnist_cnn.py --smoke - 观察点:准确率变了没有?变大还是变小?
- 你会学到:神经网络的初始权重是随机的——种子决定"起点",起点不同结果就不同;这就是为什么做实验对比要固定种子
实验 2:数据量 10 倍(5 分钟)
- 改动:
Subset(train_ds, range(500))→range(5000) - 预期先写:loss 和准确率会怎么变?
- 跑:同上
--smoke - 观察点:loss 还停在 2.2 附近吗?准确率过了 70% 吗?
- 你会学到:数据量是最便宜的提分手段——对比基线行,同一模型只多了 10 倍数据
实验 3:把学习率拉爆(5 分钟)
- 改动:
lr=1e-3→lr=1.0 - 预期先写:loss 会缓慢下降还是剧烈震荡?
- 跑:同上
--smoke - 观察点:loss 是不是不降反升/上下乱跳?
- 你会学到:学习率是训练第一超参数——步子太大永远走不到谷底(恢复原值后再试
lr=1e-7看另一个极端:几乎不动)
全量基线对照(已于 2026-11-10 跑完,实测数据)
| 运行 | 样本量 | epoch | loss 末值 | 准确率 | 总耗时 |
|---|---|---|---|---|---|
| 冒烟 | 500 | 1 | 2.2579 | 40.7% | 8s |
| 全量(实测) | 60000 | 2 | 0.0629(epoch1=0.2313) | 98.61% | 约90秒(45.8s+44.6s) |
对照后必答的三个问题:
1. 全量的 loss 末值比 ln10(≈2.30) 低了多少个数量级?这说明模型"学会了"什么?
2. 全量第 1 epoch 和第 2 epoch 的 loss 差多少?为什么第 2 轮提升变少?
3. 如果把 60000 样本只跑 1 epoch(加 --epochs 1),和 500 样本跑 10 epoch 相比,你猜哪个准确率高?为什么?(这是"数据量 vs 训练时长"的经典权衡)
记录习惯
- 每做完一次实验,在本文档表格加一行,不要新建文件
- 表格满了(约 10 行)就开新篇(放在当前阶段文件夹里,命名
NN-主题-核心问题.md),并在 README 归档清单登记 - 遇到报错:把完整 traceback 贴进当次实验的"解读"栏(报错也是实验结果)