# Figure_test **Repository Path**: flyee21/figure_test ## Basic Information - **Project Name**: Figure_test - **Description**: 基于PyTorch的手写数字识别系统,从全连接网络到CNN,最终实现99%+准确率,并提供实时手写识别GUI。 - **Primary Language**: Python - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2026-03-05 - **Last Updated**: 2026-04-14 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## 📁 项目简介 ``` 基于PyTorch的手写数字识别系统,从全连接网络到CNN,最终实现99%+准确率,并提供实时手写识别GUI。 ``` ## 📝 完整README.md ```markdown # 🖊️ 手写数字识别系统 (MNIST) ![Python](https://img.shields.io/badge/Python-3.8+-blue) ![PyTorch](https://img.shields.io/badge/PyTorch-2.0+-orange) ![License](https://img.shields.io/badge/License-MIT-green) ## 📌 项目简介 本项目是一个完整的**手写数字识别系统**,基于MNIST数据集,实现了从模型训练到实时识别的全流程。作为深度学习的"Hello World"项目,它涵盖了神经网络的核心概念,并提供了直观的GUI交互界面。 **项目特点:** - ✅ 从零实现全连接网络和CNN,理解两种架构的差异 - ✅ GPU加速训练(RTX 3050),速度提升8倍 - ✅ 实时手写识别GUI,用鼠标写数字立刻识别 - ✅ 针对数字"6"识别不准的问题进行优化,最终准确率99%+ ## 🎯 项目背景 本项目源于深度学习入门实践,旨在通过MNIST这个经典数据集,系统掌握: - 神经网络原理与PyTorch框架使用 - 卷积神经网络(CNN)的设计与优化 - GPU环境配置与加速训练 - 模型部署与GUI应用开发 ## 🏗️ 项目结构 ``` ├── train_cnn_best.py # 最高精度CNN训练脚本(99%+准确率) ├── draw_predict.py # 实时手写识别画板程序 ├── train_cnn_quickstart.py # 快速训练脚本(用于验证) ├── requirements.txt # 项目依赖 ├── README.md # 项目说明 └── models/ # 训练好的模型(自动生成) ├── StandardCNN_best.pth # 最佳CNN模型 └── mnist_model.pth # 全连接网络模型 ``` ## 🚀 快速开始 ### 环境要求 - Python 3.8+ - PyTorch 2.0+ - 可选:NVIDIA GPU + CUDA(强烈推荐) ### 安装依赖 ```bash pip install torch torchvision torchaudio matplotlib numpy pillow ``` ### 训练模型 ```bash # 训练高精度CNN模型(约5-8分钟) python train_cnn_best.py # 或快速训练验证(约1-2分钟) python train_cnn_quickstart.py ``` ### 启动实时识别 ```bash python draw_predict.py ``` ## 🧠 模型演进 | 模型 | 网络结构 | 参数量 | 准确率 | 训练时间(5轮) | |:---|:---|:---:|:---:|:---:| | **FCN (全连接)** | 784→64→64→64→10 | 5.9万 | 96.3% | 30秒 (CPU) | | **TinyCNN** | 卷积(8→16) + 全连接(32) | 1.2万 | 97.8% | 40秒 (GPU) | | **LightCNN** | 卷积(16→32) + BN + Dropout | 2.8万 | 98.7% | 60秒 (GPU) | | **StandardCNN** | 卷积(32→64) + BN + Dropout*2 | 4.5万 | **99.3%** | 90秒 (GPU) | ## ✨ 核心功能演示 ### 1. 实时手写识别 运行 `draw_predict.py` 后,你会看到一个简洁的白色画板: - 用鼠标直接写数字 - 点击"识别"按钮,立刻显示结果 - 绿色边框表示高置信度,红色表示低置信度 - 显示各数字的概率分布 ### 2. GPU加速效果 在RTX 3050 Laptop GPU上,训练速度对比: - **CPU** (R5 5600H):25轮 ≈ 60分钟 - **GPU** (RTX 3050):25轮 ≈ 7分钟 **加速比:8.5倍** ### 3. 问题优化案例 针对数字"6"容易识别错误的问题,采取了: - 增加训练轮数(5轮→25轮) - 添加学习率调度(ReduceLROnPlateau) - 优化网络结构(增加BatchNorm) 最终将数字6的识别准确率从92%提升到98.5%+。 ## 🔧 技术要点 ### 网络架构(StandardCNN) ```python 卷积层1: 1→32通道 + BN + ReLU + MaxPool 卷积层2: 32→64通道 + BN + ReLU + MaxPool 卷积层3: 64→128通道 + BN + ReLU + MaxPool 全连接层: 128*3*3 → 256 → 128 → 10 Dropout: 0.5防止过拟合 ``` ### 关键技术 - **数据增强**:随机旋转(±5°)、平移(±10%)、剪切(±5°) - **学习率调度**:ReduceLROnPlateau,准确率停滞时自动降低学习率 - **早停机制**:连续8轮无提升自动停止 - **模型保存**:只保留测试集上最佳模型 ## 📊 效果展示 ![预测示例](predictions.png) *(运行后会自动生成)* ![GUI运行效果](image.png) ### 典型测试结果 | 手写数字 | 模型预测 | 置信度 | 处理时间 | |:---:|:---:|:---:|:---:| | 0 | 0 | 99.8% | 15ms | | 1 | 1 | 99.5% | 15ms | | 2 | 2 | 99.3% | 15ms | | 3 | 3 | 99.1% | 15ms | | 4 | 4 | 98.9% | 15ms | | 5 | 5 | 99.2% | 15ms | | 6 | 6 | 98.7% | 15ms | | 7 | 7 | 99.4% | 15ms | | 8 | 8 | 98.8% | 15ms | | 9 | 9 | 99.0% | 15ms | ## 🎓 学习收获 通过本项目,我掌握了: 1. **深度学习基础**:前向传播、反向传播、梯度下降原理 2. **PyTorch框架**:模型定义、训练循环、GPU加速 3. **CNN原理**:卷积层、池化层、感受野、特征提取 4. **模型优化**:过拟合防治、学习率调度、数据增强 5. **工程实践**:环境配置、模型部署、GUI开发 ## 📝 环境配置 我的开发环境: - **OS**: Windows 11 - **CPU**: AMD R5 5600H - **GPU**: NVIDIA RTX 3050 Laptop (4GB) - **CUDA**: 12.4 - **Python**: 3.10 - **PyTorch**: 2.6.0+cu124 ## 📄 License MIT License ## 👤 作者 [飞宇] - [https://gitee.com/flyee21] ## 🙏 致谢 - MNIST数据集提供者Yann LeCun教授 - PyTorch开源社区 ``` ## 📦 补充文件:requirements.txt 创建 `requirements.txt`: ```txt torch>=2.0.0 torchvision>=0.15.0 numpy>=1.24.0 matplotlib>=3.7.0 pillow>=10.0.0 ```