## 一、使用教程
![ProjectImages](./img/menu.png)
<center>项目结构图</center>
#### **项目目录说明**
- data文件夹是保存MNIST官方数据集的文件夹,无需改动
- docs文件夹是保存我们的项目说明文档和相关图片,无需改动
- logs文件夹是保存我们已经训练过的不同模型的训练损失和验证损失可视化结果(基于Tensorboard),不需改动
- models文件夹是用来保存卷积神经网络模型代码,其中**LeNet.py,ney.py,vgg16.py**是老师提供的初始模型,其中vgg16.py中的**vgg模型**和LeNet.py中的**Module模型**已被我们调试好,可以运行;
- our_dataset文件夹是用来保存我们自己制作的数据集,包含自己手写数字图片,与标签文件等
- tools文件夹存放有用于图片处理的process.py,训练train.py,以及用于评估的evaluate.py程序等
#### **环境配置**
本项目所使用的有关软件和外部依赖库版本为:
**PyCharm Community Edition 2024.1.3 Python 3.11.7 torchvision**
**tensorboard opencv-python matplotlib~=3.8.0 pillow~=10.2.0**
1. 在启动虚拟环境下使用pip命令安装opencv—python:
```shell
pip install opencv-python -i <https://pypi.tuna.tsinghua.edu.cn/simple>
```
2. 安装pytorch:
```shell
pip install torch torchvision torchaudio -i https://pypi.tuna.tsinghua.edu.cn/simple
```
3. 安装**Tensorboard**:
在本次项目中我们使用tensordboard工具对训练过程中的训练损失和验证损失进行记录并以曲线的形式呈现。
```shell
pip install tensorboard
```
## 二、模型建立与优化
关于MNIST的基础卷积神经网络是这样设计的,
1. 第一层是一个卷积层,输入通道是1,输出通道是32,卷积核大小是3×3。输入维度是1×28×28,输出维度是32×28×28。
2. 第二层是一个下采样层,采样核大小是2×2,输入维度是32×28×28,输出维度是32×14×14。
3. 第三层是一个卷积层,输入通道是32,输出通道是64,卷积核大小是3×3。输入维度是32×14×14,输出维度是64×14×14。
4. 第四层是一个下采样层,采样核大小是2×2,输入维度是64×14×14,输出维度是64×7×7。
5. 第五层是展平层,张量维度为64×7×7。
6. 第六层是一个全连接层,输出神经元个数为128个。
7. 第七层是一个全连接层,输出神经元个数为10个。
代码如下:
```python
import torch.nn as nn
import torch.nn.functional as F
class CNN(nn.Module):
def __init__(self):
super(CNN, self).__init__()
self.conv1 = nn.Conv2d(1, 32, kernel_size=3, padding=1)
self.conv2 = nn.Conv2d(32, 64, kernel_size=3, padding=1)
self.pool = nn.MaxPool2d(kernel_size=2, stride=2, padding=0)
self.fc1 = nn.Linear(128 * 7 * 7, 128)
self.fc2 = nn.Linear(128, 10)
def forward(self, x):
x = self.pool(F.relu(self.conv1(x)))
x = self.pool(F.relu(self.conv2(x)))
x = x.view(-1, 128 * 7 * 7)
x = F.relu(self.fc1(x))
x = self.fc2(x)
```
在基础的卷积神经网络CNN下我们进行了修改,给出了一个目前调试得最好的CNN模型,其设计如下:
1. 第一层是一个卷积层,输入通道是1,输出通道是32,卷积核大小是3×3。输入维度是1×28×28,输出维度是32×28×28。
2. 第二层是一个下采样层,采样核大小是2×2,输入维度是32×28×28,输出维度是32×14×14。
3. 第三层是一个卷积层,输入通道是32,输出通道是64,卷积核大小是3×3。输入维度是32×14×14,输出维度是64×14×14。
4. 第四层是一个下采样层,采样核大小是2×2,输入维度是64×14×14,输出维度是64×7×7。
5. 第五层是一个卷积层,输入通道是64,输出通道是128,卷积核大小是3×3。输入维度是64×7×7,输出维度是128×7×7。
6. 第六层是展平层,张量维度为128×7×7。
7. 第七层是一个全连接层,输出神经元个数为128个。
8. 第八层是一个全连接层,输出神经元个数为256个。
9. 第九层是一个全连接层,输出神经元个数为10个。
代码如下:
```python
import torch.nn as nn
import torch.nn.functional as F
class CNN(nn.Module):
def __init__(self):
super(CNN, self).__init__()
self.conv1 = nn.Conv2d(1, 32, kernel_size=3, padding=1)
self.conv2 = nn.Conv2d(32, 64, kernel_size=3, padding=1)
self.conv3 = nn.Conv2d(64, 128, kernel_size=3, padding=1)
self.pool = nn.MaxPool2d(kernel_size=2, stride=2, padding=0)
self.fc1 = nn.Linear(128 * 7 * 7, 128)
self.fc2 = nn.Linear(128, 256)
self.fc3 = nn.Linear(256, 10)
def forward(self, x):
x = self.pool(F.relu(self.conv1(x)))
x = self.pool(F.relu(self.conv2(x)))
x = (F.relu(self.conv3(x)))
x = x.view(-1, 128 * 7 * 7)
x = F.relu(self.fc1(x))
x = F.relu(self.fc2(x))
x = self.fc3(x)
```
此外我们还基于CNN调试了其他三个模型,但效果不如上文调试出的最好模型,下面做出简要介绍:
- 第一个:在基础模型上往欠拟合方向进行改动:在第一个全连接层后加入dropout层进行正则化
- 第二个:在最佳模型上往欠拟合方向进行改动:删除第三个卷积层
- 第三个:在最佳模型上往过拟合方向进行改动:将卷积核大小改为5 * 5
## 三、模型训练
运行tools文件夹下的**train.py**文件,会分别选择对应的神经网络进行训练。训练后生成.pth保存训练好的模型权重,以及在logs文件夹的fit下面生成一个保存训练过程中损失数据的文件。
#### **训练结果可视化**
利用tensorboard,使用时可在pycharm的终端下使用命令:
```shell
tensorboard--logdir="(路径替换为自己的路径)"
```
这会生成一个端口,进入端口即可查看记录数据
#### **模型测试**
1. 在our_dataset/test_data文件夹下的10个文件夹下放入对应的手写数字图片,图片长和宽随意,注意图片要是黑底白字的。
2. 如果要测试训练好的CNN模型,请运行tools文件夹下的**trained.py**
3. 然后会在modules文件下生成一个**mnist_cnn.pth**,这样就保存好了训练好的模型。
**准确率参考:**
<center>表1 不同模型在验证集上的最终准确率</center>
| model | Accuracy | epoch |
| :----------: | :------: | :---: |
| CNN(初始) | 98.56% | 2 |
| VGG16(初始) | 86.39% | 2 |
| Module(初始) | 10.10% | 2 |
<center>表2 CNN模型在不同优化器测试后的最终准确率</center>
| trained-model | 优化器 | Accuracy | epoch |
| :-----------: | :----: | :------: | :---: |
| CNN | SGD | 93% | 10 |
| CNN | Adam | 97% | 10 |
| CNN(best) | Adam | 99% | 10 |
## **四、训练结果可视化**
运行tensorboard命令即可在浏览器中查看训练结果:
![ProjectImages](./img/trainloss.png)
<center>CNN+Adam的训练损失曲线</center>
![ProjectImages](./img/valloss.png)
<center>CNN+Adam的验证损失曲线</center>
## 五、制作自己的数据集
our_dataset文件夹下有三个文件夹,input、output、test_data。
- **input**文件夹下,保存未处理的手写图片,比如保存数字1的手写图片,依次类推。
- **output**文件夹下,保存从input文件夹中读取的所有图片,并经过了相关的处理。
- **test_data**文件夹下,保存有我们处理好并经过标签分类好的测试图片。
整个目录树如图所示:
![myHandWriting](./img/data.png)
#### 手写图片制作
打开windows画板,或者使用平板,写一些数字,然后用图片编辑软件裁剪图片,使得数字大概在裁剪图片�
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
Python毕业设计基于CNN卷积神经网络的手写数字识别代码+使用说明(高分项目),个人大四的毕业设计、经导师指导并认可通过的高分设计项目,评审分99分,代码完整确保可以运行,小白也可以亲自搞定,主要针对计算机相关专业的正在做毕设的学生和需要项目实战练习的学习者,也可作为课程设计、期末大作业。 Python毕业设计基于CNN卷积神经网络的手写数字识别代码+使用说明(高分项目)Python毕业设计基于CNN卷积神经网络的手写数字识别代码+使用说明(高分项目)Python毕业设计基于CNN卷积神经网络的手写数字识别代码+使用说明(高分项目)Python毕业设计基于CNN卷积神经网络的手写数字识别代码+使用说明(高分项目)Python毕业设计基于CNN卷积神经网络的手写数字识别代码+使用说明(高分项目)Python毕业设计基于CNN卷积神经网络的手写数字识别代码+使用说明(高分项目)个人大四的毕业设计、经导师指导并认可通过的高分设计项目,评审分99分,代码完整确保可以运行,小白也可以亲自搞定,主要针对计算机相关专业的正在做毕设的学生和需要项目实战练习的学习者,也可作为课程设计、期末大作业。
资源推荐
资源详情
资源评论
收起资源包目录
Python毕业设计基于CNN卷积神经网络的手写数字识别代码+使用说明(高分项目) (600个子文件)
events.out.tfevents.1719501021.DESKTOP-49FABI1 5KB
events.out.tfevents.1719501493.DESKTOP-49FABI1 5KB
events.out.tfevents.1719502004.DESKTOP-49FABI1 5KB
events.out.tfevents.1719474794.DESKTOP-49FABI1 5KB
events.out.tfevents.1719503032.DESKTOP-49FABI1 5KB
events.out.tfevents.1719460510.DESKTOP-49FABI1 5KB
events.out.tfevents.1719458248.DESKTOP-49FABI1 5KB
events.out.tfevents.1719502620.DESKTOP-49FABI1 5KB
events.out.tfevents.1719460886.DESKTOP-49FABI1 5KB
events.out.tfevents.1719459356.DESKTOP-49FABI1 5KB
events.out.tfevents.1719468328.DESKTOP-49FABI1 5KB
events.out.tfevents.1719461310.DESKTOP-49FABI1 5KB
events.out.tfevents.1719460182.DESKTOP-49FABI1 5KB
events.out.tfevents.1719458988.DESKTOP-49FABI1 5KB
events.out.tfevents.1719459768.DESKTOP-49FABI1 5KB
events.out.tfevents.1719457910.DESKTOP-49FABI1 1KB
events.out.tfevents.1719457021.DESKTOP-49FABI1 1KB
events.out.tfevents.1719455758.DESKTOP-49FABI1 1KB
events.out.tfevents.1719458093.DESKTOP-49FABI1 1KB
.gitignore 50B
train-images-idx3-ubyte.gz 9.45MB
train-images-idx3-ubyte.gz 9.45MB
t10k-images-idx3-ubyte.gz 1.57MB
t10k-images-idx3-ubyte.gz 1.57MB
train-labels-idx1-ubyte.gz 28KB
train-labels-idx1-ubyte.gz 28KB
t10k-labels-idx1-ubyte.gz 4KB
t10k-labels-idx1-ubyte.gz 4KB
LCP_MNIST.iml 318B
binary_image_18.jpg 14KB
binary_image_8.jpg 12KB
binary_008da1d0eee9331b9de3d14bb5f64b41.jpg 11KB
3b848d1c3f9469aeed275aaf12417fda.jpg 11KB
binary_8afc78379c1e4006a4a5707cfd2e31b2.jpg 11KB
d3ddbd85f327b22e4cac5e853c5e7ba3.jpg 11KB
binary_image_11.jpg 10KB
binary_image_13.jpg 10KB
binary_dde911fc226b5e4ba8c2f3b662988d63.jpg 10KB
binary_3b48613c0b18a2c334f1370bb2398af5.jpg 10KB
binary_image_5.jpg 9KB
binary_image_19.jpg 9KB
augmented_37.jpg 9KB
binary_e942d1af328f7f589189be584096ab11.jpg 9KB
binary_image_4.jpg 9KB
binary_image_2.jpg 9KB
augmented_38.jpg 9KB
binary_b5512d711f5bee22944b19cf506eeb3d.jpg 9KB
binary_image_23.jpg 9KB
augmented_36.jpg 9KB
augmented_39.jpg 9KB
binary_b48a7e89690c4737a4bc4cd8e780b7e8.jpg 9KB
binary_image_25.jpg 9KB
6697bb2c112a29b46dd6ab1bcb277a88.jpg 9KB
augmented_92.jpg 9KB
6092aa6ad186741c24a8f729c85c7b56.jpg 9KB
binary_7faf90bcfd3abda3d24bc1ecca21d88f.jpg 8KB
binary_fb9d986053a5b3cbb836a141b3426efa.jpg 8KB
augmented_93.jpg 8KB
binary_df35a61d0ff38a85e117df7a29da4959.jpg 8KB
augmented_95.jpg 8KB
binary_image_12.jpg 8KB
augmented_94.jpg 8KB
fb278a389503471428107d98f43fb9f3.jpg 8KB
ec3b11e08aedf37162de38c0ec09316c.jpg 8KB
binary_b66a7aece93dad0ea39528f1487a5cbb.jpg 8KB
binary_image_14.jpg 8KB
binary_image_7.jpg 8KB
binary_1330888cd7e201c8a86a1605abf696e4.jpg 8KB
binary_90e2a9d633a497ca5d046c601becca30.jpg 8KB
17adfcc7db3c7fb29e76dd2dbcfbc8c7.jpg 8KB
binary_71a59e9eec1790e108701d040240fd65.jpg 8KB
21d99275805b0cbeafb1aab901c112d6.jpg 8KB
binary_8df2c32c900f5816eed8f8a79804cbd3.jpg 8KB
augmented_9.jpg 8KB
augmented_78.jpg 8KB
augmented_16.jpg 7KB
augmented_80.jpg 7KB
binary_1b7d3a1155752377b806e202a25a9262.jpg 7KB
augmented_19.jpg 7KB
augmented_10.jpg 7KB
3550aee90f68536d47612eab5cf9b7cb.jpg 7KB
augmented_0.jpg 7KB
augmented_0.jpg 7KB
augmented_3.jpg 7KB
augmented_3.jpg 7KB
augmented_2.jpg 7KB
augmented_2.jpg 7KB
augmented_43.jpg 7KB
augmented_1.jpg 7KB
augmented_1.jpg 7KB
augmented_46.jpg 7KB
augmented_17.jpg 7KB
binary_79f24a556c9f4c9a5fa164f7471888a8.jpg 7KB
augmented_8.jpg 7KB
augmented_76.jpg 7KB
4b8374aec60803763143883bac112e38.jpg 7KB
ad8a12b0b805d42e1e2b9ba592daf648.jpg 7KB
augmented_11.jpg 7KB
augmented_82.jpg 7KB
augmented_41.jpg 7KB
共 600 条
- 1
- 2
- 3
- 4
- 5
- 6
资源评论
猰貐的新时代
- 粉丝: 1w+
- 资源: 2886
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功