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

no word

Branch1Tags0
FilesLast commitLast update
11 days ago
11 days ago
11 days ago
11 days ago
11 days ago
11 days ago

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