Day 117 — 迁移学习 练习清单
✅ 今日完成清单
- [ ] 理解迁移学习的核心思想和应用场景
- [ ] 了解常见预训练模型(ResNet/VGG/EfficientNet)的特点
- [ ] 掌握特征提取(Feature Extraction)模式
- [ ] 掌握微调(Fine-tuning)的两种策略
- [ ] 理解差分学习率(Discriminative Learning Rates)
- [ ] 运行代码示例 01-basic-transfer-learning.py
- [ ] 运行代码示例 02-fine-tuning.py
- [ ] 运行代码示例 03-pitfalls-and-practice.py
- [ ] 完成基础练习题
- [ ] 完成进阶挑战题
📝 基础练习题
练习 1:特征提取 vs 微调对比
使用 ResNet-18(比 ResNet-50 更轻量),分别用特征提取和微调两种方式在 CIFAR-10 上训练,对比最终准确率。
要求: - 特征提取:冻结所有层,只训练分类头 - 微调:解冻 layer4,差分学习率训练 - 输出两种方式的准确率对比
练习 2:不同预训练模型对比
使用 CIFAR-10 数据集,分别用以下预训练模型进行特征提取,比较训练速度和准确率: - ResNet-18 - ResNet-50 - VGG-16
要求: - 相同的训练设置(epochs, lr, batch_size) - 输出每个模型的参数量、训练时间、最终准确率
练习 3:数据增强效果
在迁移学习中,对比使用和不使用数据增强的效果差异。
要求: - 不使用增强:直接 resize + crop + normalize - 使用增强:添加 RandomHorizontalFlip + RandomRotation + ColorJitter - 输出两种设置的训练曲线
🚀 进阶挑战题
挑战 1:渐进式解冻实现
实现一个完整的渐进式解冻训练器: - 阶段 1: 只训练分类头(3 epochs) - 阶段 2: 解冻 layer4 + 分类头(3 epochs) - 阶段 3: 解冻 layer3-4 + 分类头(3 epochs) - 阶段 4: 全量微调(3 epochs)
要求: - 每个阶段使用不同的学习率 - 记录每个阶段的训练/验证准确率 - 绘制训练曲线图(可选)
挑战 2:自定义数据集迁移学习
使用 torchvision.datasets 中的 Oxford-IIIT Pet 数据集(37 个类别),完成完整的迁移学习流程:
1. 数据预处理
2. 模型加载与修改
3. 分阶段训练
4. 评估与可视化
要求: - 准确率 > 85% - 保存训练好的模型 - 可视化预测结果(可选)
挑战 3:模型部署准备
将训练好的模型封装为一个完整的推理类: 1. 加载模型和预处理参数 2. 支持单张图片推理 3. 支持批量推理 4. 输出 top-5 预测结果
要求:
- 类包含 predict(image_path) 和 predict_batch(image_paths) 方法
- 返回类别名称和置信度
- 可选:添加时间统计功能