5:卷积神经网络实战
纸上得来终觉浅,绝知此事要躬行。
本次任务使用 CIFAR-10 数据集。你需要从零搭建一个卷积神经网络,完成十分类任务,并通过一次对比实验尝试改进模型。
数据集在哪里(?最方便的方式是直接通过 torchvision 下载。download=True 会自动将数据保存到指定的 root 目录;train=True 加载训练集,train=False 加载测试集。
from torchvision import datasets, transforms
transform = transforms.Compose([ transforms.ToTensor(),])
train_dataset = datasets.CIFAR10( root="./data", train=True, download=True, transform=transform)
test_dataset = datasets.CIFAR10( root="./data", train=False, download=True, transform=transform)也可以从多伦多大学的 CIFAR 官方页面手动下载 Python 版本压缩包,官方页面提供约 163 MB 的 Python 数据版本。
一、认识数据📊
Section titled “一、认识数据📊”CIFAR-10 中的每张图片大小为:
数据集包含以下十个类别:
airplane、automobile、bird、cat、deerdog、frog、horse、ship、truck请完成:
使用 PyTorch 加载 CIFAR-10,并划分训练集、验证集和测试集。 随机展示部分图片,观察不同类别之间有哪些容易区分或容易混淆的特征。
建议将原训练集划分为:
训练集:45000 张验证集: 5000 张测试集:10000 张二、搭建基础的CNN架构
Section titled “二、搭建基础的CNN架构”请使用 PyTorch 的基础组件,搭建一个用于 CIFAR-10 分类的卷积神经网络。
网络至少包含:
- 两个卷积层;
- 非线性激活函数;
- 池化或其他下采样操作;
- 全局平均池化或 Flatten;
- 输出维度为 10 的分类层。
可以参考下面的数据流,但不要求完全照搬:
输入图片 ↓ 卷积 + 激活 ↓ 池化 ↓ 卷积 + 激活 ↓ 池化 ↓ 全局平均池化 ↓ 全连接分类要求:
不得直接使用 torchvision.models 中已经搭建完成的模型。 在注释或报告中写出各主要层的输入和输出形状。
三、让模型move on
Section titled “三、让模型move on”请选择合适的损失函数和优化器,完成模型训练。
训练过程中至少记录:
- 训练集损失;
- 验证集损失;
- 训练集准确率;
- 验证集准确率。
请绘制训练曲线,并保存验证集表现最好的模型。
不要求手动实现反向传播,但需要能够说明下面几行代码分别完成了什么:
optimizer.zero_grad()loss.backward()optimizer.step()四、优化你的CNN
Section titled “四、优化你的CNN”在基础 CNN 上任选一种方法进行改进:
- 加入 BatchNorm;
- 加入 Dropout;
- 使用数据增强;
- 调整网络深度或通道数;
- 将 Flatten 改为全局平均池化;
- 加入一个简单的残差连接;
- 更换优化器或学习率策略。
为了公平比较,改进前后应尽量保持训练轮数、数据划分和其他训练条件一致。
完成下面的表格:
| 模型 | 验证集准确率 | 测试集准确率 | 参数量 |
|---|---|---|---|
| 基础 CNN | |||
| 改进后的 CNN |
请简单回答:
你修改了什么?为什么认为它可能有效?实验结果是否符合预期?
改进后性能没有提升并不代表实验失败,但需要分析可能的原因。
五、模型到底看懂了吗?
Section titled “五、模型到底看懂了吗?”请在测试集上完成模型评估,并展示:
- 测试集准确率;
- 混淆矩阵;
- 若干预测正确的图片;
- 若干预测错误的图片。
选择一组容易混淆的类别,例如 cat 和 dog,简单分析:
模型为什么容易混淆它们? 问题可能来自图片分辨率、训练数据,还是模型结构?
六、拓展挑战
Section titled “六、拓展挑战”以下内容任选其一,不作为基础要求:
- 使用残差块搭建一个小型 ResNet;
- 可视化第一层卷积核或中间特征图;
- 比较 MLP 和 CNN 在 CIFAR-10 上的参数量与分类效果;
- 使用深度可分离卷积设计轻量模型;
- 研究不同数据增强方式对模型的影响。
-
请提交:
- 可以运行的完整代码;
- 模型结构及各层输出形状;
- 训练和验证曲线;
- 基础模型与改进模型的对比结果;
- 混淆矩阵与错误样本分析;
- 简短的实验总结。
允许查阅资料或使用 AI 辅助,但需要能够解释模型结构、训练流程以及自己做出的修改。
-
整体报告: ml-5-姓名-学号.md
-
邮箱: gimmerml401@163.com
-
主题: 5-姓名-学号
出题人:
Parzival
QQ:450621609
