ministtry:基于 PyTorch CNN 的手写数字识别项目

no word

Branch1Tags0

MNIST 手写数字识别

基于 PyTorch 的手写数字识别项目,包含完整的 CNN 训练流程和一个可交互的画板预测工具。

项目结构

ministtry/
├── ministtest1.ipynb    # 完整训练 notebook(环境检查→数据→模型→训练→测试→可视化)
├── usertest.py          # 画板手写预测 + 在线微调工具
├── mnist_weights.pth    # 训练好的模型权重(904KB)
├── MINIST/              # MNIST 原始数据集(idx.gz 格式)
└── README.md

环境要求

  • Python 3.10
  • PyTorch 2.14+(CUDA 12.6,GPU 可选)
  • numpy / matplotlib / pillow

虚拟环境已配置在 .venv/,直接使用即可。

模型

两层卷积 CNN:

Conv2d(1→32, 3×3) → ReLU → MaxPool(2)
Conv2d(32→64, 3×3) → ReLU → MaxPool(2)
Dropout(0.25) → FC(1600→128) → ReLU → FC(128→10)

参数量约 43 万,Adam 优化器,lr=1e-3,batch_size=64。

训练结果

5 个 epoch,在 RTX 4060 Laptop 上每轮约 3 秒:

Epoch Train Loss Train Acc Test Acc
1 0.1924 94.14% 98.45%
2 0.0604 98.08% 98.82%
3 0.0432 98.64% 98.94%
4 0.0346 98.93% 99.06%
5 0.0297 99.03% 99.26%

快速开始

1. 训练模型

用 JupyterLab 打开 ministtest1.ipynb,选择 .venv 的 kernel,从头运行即可。

2. 画板预测

.\.venv\Scripts\python.exe usertest.py
  • 在画板上手写 0-9 的数字
  • 点「预测」查看结果和 Top3 置信度
  • 预测对了点「✓ 预测正确」微调
  • 预测错了输入正确数字,点「✗ 纠正并微调」
  • 微调后权重自动保存到 mnist_weights.pth

数据说明

MNIST 数据集位于 MINIST/ 目录,使用 gzip + numpy 直接解析 idx 文件,无需在线下载:

  • train-images-idx3-ubyte.gz(60000×28×28)
  • train-labels-idx1-ubyte.gz
  • t10k-images-idx3-ubyte.gz(10000×28×28)
  • t10k-labels-idx1-ubyte.gz