使用卷积神经网络对 Fashion-MNIST 数据集中 10 类灰度服装图像(28×28)进行自动分类。
训练 10 个 epoch 后,模型在测试集上可达到 ≈ 91 % 的准确率。
├── data.py # 数据加载与预处理
├── model.py # CNN 模型结构
├── train.py # 训练逻辑(中文日志)
├── evaluate.py # 评估逻辑(中文指标)
├── main.py # 命令行入口:训练 / 评估
├── README.md # 本文件
└── report.pdf # 实验报告(另存 Word→PDF)
| 依赖 | 推荐版本 | 说明 |
|---|---|---|
| Python | ≥ 3.8 | 任意发行版均可 |
| PyTorch | ≥ 1.8 | 建议安装 GPU 版 以充分利用 CUDA |
| torchvision | 与 PyTorch 匹配 | 数据集加载与图像变换 |
| scikit-learn | ≥ 0.24 | 生成分类报告 & 混淆矩阵 |
安装示例(CPU):
pip install torch torchvision scikit-learn如需 GPU 版,请查看 https://pytorch.org 选择对应 CUDA wheel。
python main.py --mode train --epochs 10 --batch-size 64- 自动检测 GPU:若可用,打印
使用设备: cuda并启用显卡训练;否则退回 CPU。 - 每 epoch 输出:训练损失 / 训练准确率 / 测试损失 / 测试准确率
- 训练结束后模型权重默认保存为
fashion_mnist_cnn.pth(可用--model-path自定义)。
python main.py --mode eval --model-path fashion_mnist_cnn.pth- 输出整体准确率、各类别 Precision / Recall / F1、以及 10×10 混淆矩阵。
| 参数 | 默认 | 含义 |
|---|---|---|
--mode |
train | 运行模式:train / eval |
--epochs |
10 | 训练轮数 |
--batch-size |
64 | 批大小 |
--lr |
0.001 | 学习率 |
--model-path |
fashion_mnist_cnn.pth | 权重保存/加载路径 |
--device |
自动 | 强制指定 cpu 或 cuda |
| 问题 | 解决方案 |
|---|---|
| 下载数据集缓慢 | 手动下载 .gz 放到 ~/.torch/datasets |
| GPU 显存不足 | 调小 --batch-size 或切换 --device cpu |
| 分类效果未达预期 | 增加 --epochs、加入数据增强、或替换更深网络 |
- Fashion-MNIST: Xiao et al., 2017
- PyTorch 官方教程 https://pytorch.org/tutorials