基于PyTorch的深度学习项目,包含MLP和CNN两种神经网络模型,支持训练、保存、Web推理全流程。
项目采用分层架构,训练、推理、模型文件分离:
HelloMNIST/
│
├── 📂 train/ # 训练环境(仅需训练依赖)
│ ├── MLP.py # MLP模型训练脚本
│ └── CNN.py # CNN模型训练脚本
│
├── 📂 web/ # Web推理环境(仅需推理依赖)
│ ├── app.py # Flask推理服务器
│ └── templates/
│ └── index.html # 交互式手写界面
│
├── 📂 models/ # 模型存储目录
│ ├── mlp_model.pth # 训练好的MLP模型参数
│ └── cnn_model.pth # 训练好的CNN模型参数
│
├── 📄 README.md # 项目说明(本文档)
└── ⚙️ pyproject.toml # 项目配置文件
目录说明:
train/- 训练相关代码,依赖PyTorch、torchvisionweb/- Web推理服务,依赖Flask、Pillowmodels/- 模型存储目录(由训练脚本自动生成)
# 安装uv包管理器(如果还没安装)
pip install uv
# 克隆项目
git clone git@github.com:HandyWote/HelloMinist.git
cd HelloMNISTuv pip install -e ".[training]"
cd train
uv run MLP.py
uv run CNN.py- 输出:模型保存到
models/目录
uv pip install -e ".[web]"
cd web
uv run app.py服务启动后,访问 http://127.0.0.1:5002
- 绘制数字:在左侧画布上用鼠标写数字(0-9)
- 选择模型:
- MLP分析:使用全连接神经网络
- CNN分析:使用卷积神经网络(推荐)
- 查看结果:右侧显示预测数字和10个类别的概率分布
- 重置画布:点击"重置画布"清除
MLP.py和CNN.py已添加数据增强:
transforms.RandomRotation(15) # 随机旋转±15度
transforms.RandomAffine(0, translate=(0.1, 0.1)) # 随机平移
transforms.RandomPerspective() # 随机透视变换重新训练:
# 删除旧模型
rm mlp_model.pth cnn_model.pth
# 重新训练
uv run MLP.py
uv run CNN.py如果需要更细的笔画:
// 修改 templates/index.html 第457行
ctx.lineWidth = 8; // 从20改成8或10存储位置:models/ 目录
加载方式:
# 由 web/app.py 自动加载
checkpoint = torch.load('../models/mlp_model.pth')
model.load_state_dict(checkpoint['model_state_dict'])
model.eval()MIT License - 可自由使用、修改、分发
最后更新:2025年11月30日