Skip to content

About

由 AI 指导和生成的 “手写数字识别学习项目”,帮助初学者掌握使用 PyTorch 训练一个简单的深度学习模型;

Resources

Stars

1 star

Watchers

0 watching

Forks

Latest commit

 

History

8 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

IMGRecognizer

这是一个从 0 到 1 的手写数字识别学习项目。仓库围绕 MNIST 数据集,用 PyTorch 逐步搭建了一个完整的深度学习入门闭环:

  • 数据集理解
  • 张量与 shape
  • 最小模型
  • 训练循环
  • 完整训练
  • 模型评估
  • 单张预测
  • 外部图片预测 Web Demo

当前默认任务是:

手写数字识别(MNIST, 0~9 分类)

Demo 效果

MNIST Web Demo


快速开始

1. 创建环境

python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt

2. 完整训练

训练线性模型:

source .venv/bin/activate
python scripts/train_mnist_classifier.py

训练 CNN 模型:

source .venv/bin/activate
python scripts/train_cnn_mnist_classifier.py

训练数据增强 CNN 模型:

source .venv/bin/activate
python scripts/train_augmented_cnn_mnist_classifier.py

3. 评估模型

source .venv/bin/activate
python scripts/evaluate_mnist_classifier.py

也可以指定模型:

python scripts/evaluate_mnist_classifier.py --model cnn

4. 单张预测

source .venv/bin/activate
python scripts/predict_single_image.py

5. 启动 Web Demo

source .venv/bin/activate
streamlit run demo/web_demo.py

6. 评估外部图片

source .venv/bin/activate
python scripts/evaluate_external_images.py

也可以比较预处理方式:

python scripts/evaluate_external_images.py --preprocessing basic
python scripts/evaluate_external_images.py --preprocessing centered

当前结果

  • 当前最小线性模型测试准确率约:91.83%
  • 当前最小 CNN 模型测试准确率约:96.77%
  • 当前数据增强 CNN 模型测试准确率约:96.55%
  • 当前模型权重路径:artifacts/minimal_mnist_classifier.pth
  • 当前 CNN 模型权重路径:artifacts/minimal_cnn_mnist_classifier.pth
  • 当前数据增强 CNN 模型权重路径:artifacts/augmented_cnn_mnist_classifier.pth

仓库结构

IMGRecognizer/
├── README.md
├── demo/
├── requirements.txt
├── scripts/
└── docs/

后续我们会把学习过程中的文档逐步放进 docs/ 目录,比如:

  • 阶段说明
  • 概念笔记
  • 数据集说明
  • 模型说明
  • 训练记录
  • 问题排查记录

当前已创建:


项目总目标

  • 从 0 开始理解一个深度学习项目的完整流程
  • 亲手训练出一个可运行的手写数字识别模型
  • 学会对模型进行测试、预测和分析
  • 最终具备扩展到更复杂手写体识别任务的能力

阶段 0:建立全局认知

目标:先不急着写代码,先知道整个项目到底在做什么。

  • 理解什么是“手写体识别”
  • 理解什么是样本、标签、特征
  • 理解什么是训练集、测试集
  • 理解什么是模型
  • 理解什么是损失函数和优化器
  • 理解什么是训练、验证、推理
  • 理解为什么先从 MNIST 手写数字识别开始

完成标志:

  • 能用自己的话解释一个图像分类项目的基本流程

阶段 1:环境准备

目标:把项目运行环境准备好,并理解每一步为什么要做。

  • 检查本机 Python 是否可用
  • 创建并激活 .venv
  • 确认当前终端正在使用项目环境中的 Python
  • 创建第一个最小依赖文件
  • 安装基础依赖
  • 验证依赖安装成功

完成标志:

  • 能在当前项目中成功进入虚拟环境并运行 Python

阶段 2:认识数据集

目标:先研究数据,而不是一上来就训练模型。

  • 理解 MNIST 数据集是什么
  • 了解一张图片对应一个标签是什么意思
  • 下载 MNIST 数据集
  • 编写脚本读取一条样本
  • 打印图片数据类型、形状和标签
  • 理解为什么图片大小是 28x28
  • 可视化几张样本图片
  • 观察不同数字的样子

完成标志:

  • 能清楚说出“模型输入的图片数据长什么样”

阶段 3:认识张量与输入输出

目标:理解深度学习里最基础的数据表示方式。

  • 理解什么是张量(tensor)
  • 理解图像数据在代码里的维度含义
  • 理解单张图片和一批图片的区别
  • 理解 batch 的概念
  • 观察一批 MNIST 数据的 shape
  • 理解标签张量长什么样
  • 理解模型输入 shape 和输出 shape

完成标志:

  • 能读懂一条图像分类数据在代码中的 shape

阶段 4:第一个最小模型

目标:先实现一个最简单、能跑通的模型。

  • 理解为什么图像任务常用神经网络
  • 初步认识全连接层和卷积层
  • 先决定第一版模型结构
  • 创建模型文件
  • 编写模型类
  • 编写 forward 方法
  • 用假数据测试模型是否能跑通
  • 检查模型输出 shape 是否正确

完成标志:

  • 模型能接收输入并输出 10 个类别分数

阶段 5:理解训练循环

目标:把训练过程拆开,真正理解每一步在做什么。

  • 理解一次训练迭代包含哪些步骤
  • 理解前向传播
  • 理解损失函数如何计算误差
  • 理解反向传播的作用
  • 理解优化器如何更新参数
  • 编写单步训练逻辑
  • 理解 epoch 和 batch 的关系
  • 打印训练过程中的 loss

完成标志:

  • 能自己解释“训练一轮”到底发生了什么

阶段 6:正式训练模型

目标:把数据、模型、训练循环串起来,开始真正训练。

  • 编写训练入口脚本
  • 加载训练集 DataLoader
  • 加载测试集 DataLoader
  • 初始化模型
  • 初始化损失函数
  • 初始化优化器
  • 跑通第 1 次训练
  • 观察每轮训练的 loss 和 accuracy
  • 保存模型权重文件

完成标志:

  • 成功训练出第一个可用模型

阶段 7:评估模型效果

目标:判断模型训练得怎么样,而不是只看它“能不能跑”。

  • 在测试集上评估准确率
  • 理解准确率的含义
  • 查看模型在哪些样本上预测错误
  • 分析常见错误类型
  • 记录当前模型效果

完成标志:

  • 能解释当前模型效果好不好,以及为什么

阶段 8:单张图片预测

目标:让训练好的模型识别新的手写图片。

  • 编写预测脚本
  • 加载训练好的模型
  • 读取单张图片
  • 对图片做与训练一致的预处理
  • 输出预测类别
  • 输出预测置信度
  • 测试几张图片的预测结果

完成标志:

  • 模型能够对单张新图片完成预测

阶段 9:项目整理与复盘

目标:把项目整理成一个清晰、可复用的学习成果。

  • 整理目录结构
  • 补充项目说明
  • 记录训练命令
  • 记录预测命令
  • 记录当前模型效果
  • 复盘整个项目学到了什么

完成标志:

  • 项目达到“别人拿到也能看懂并运行”的状态

阶段 10:能力升级

目标:在第一版闭环完成后,继续往更真实的任务推进。

  • 认识数据增强
  • 可视化数据增强效果
  • 把数据增强接入 CNN 训练
  • 理解为什么要升级到 CNN
  • 编写最小 CNN shape 演示
  • 尝试更强的模型结构并训练
  • 支持评估脚本选择模型
  • 支持 Web Demo 选择模型
  • 支持自定义手写图片数据训练
  • 支持外部图片预测
  • 开发简单 Web Demo
  • 支持英文手写字母识别
  • 了解中文手写体识别的难点
  • 尝试模型导出或部署

完成标志:

  • 具备把入门项目扩展为更真实任务的基础能力

当前进度

  • 阶段 0:建立全局认知
  • 阶段 1:环境准备
  • 阶段 2:认识数据集
  • 阶段 3:认识张量与输入输出
  • 阶段 4:第一个最小模型
  • 阶段 5:理解训练循环
  • 阶段 6:正式训练模型
  • 阶段 7:评估模型效果
  • 阶段 8:单张图片预测
  • 阶段 9:项目整理与复盘
  • 阶段 10:能力升级(进行中)

备注

  • 当前已完成:检查本机 Python 是否可用
  • 当前已完成:阶段 0 建立全局认知
  • 当前已完成:阶段 1 环境准备
  • 当前已完成:阶段 3 张量与输入输出
  • 当前已完成:阶段 5 理解训练循环
  • 当前已完成:阶段 6 正式训练模型
  • 当前已完成:阶段 7 评估模型效果
  • 当前已完成:阶段 8 单张图片预测
  • 当前已完成:阶段 9 项目整理与复盘
  • 当前所在阶段:阶段 10
  • 当前下一步:扩充外部验证集,或让数据增强更接近外部图片风格

About

由 AI 指导和生成的 “手写数字识别学习项目”,帮助初学者掌握使用 PyTorch 训练一个简单的深度学习模型;

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages