# “手写数字识别代”代码复现
## 一、开发环境
开发语言 : python 3.6.13
使用框架 :TensorFlow 2.5.0 + Keras 2.5.0
开发工具 :PyCharm 2020.2.2 x64
## 二、项目目录说明
此次复现的主要代码文件有:
1. simpleDemo.py
参考了书目《Python 深度学习》,是一个最简单的数字识别。
从 Kears 的 datasets 中导入 mnist, 并使用简单的隐藏层进行训练。
2. complexDemo.py
添加多层神经网络的较复杂数字之别。
从 Keras 的 datasets 中导入 mnist,并使用带有均值池化的卷积神经网络方法训练。
3. finalDemo.py
最终的数字识别。
为了验证算法的可行性以及最终的正确性,这里采用了 Kaggle 比赛中 Digit Recognizer 题目所提供的的 mnist 测试集 test.csv 和训练集 train.csv, 并采用带有最大池化的卷积神经网络,以及避免过拟合的方法进行训练。
4. input 文件夹
存放从 finalDemo 中读取的文件,训练集 train.csv 和测试集 test.csv。
5. output 文件夹
存放 finalDemo.py 最终生成的 CSV 文件。
## 三、代码与算法流程结果分析
首先需要将二维的数据一维化
![](https://www.writebug.com/myres/static/uploads/2021/11/20/0e9022f2a11b6c958b53ab77940a4f24.writebug)
1. simpleDemo.py
最简单的程序
- 搭建神经网络
![](https://www.writebug.com/myres/static/uploads/2021/11/20/446750888cc8d4c2ae629f3c6acc2fd4.writebug)
- 算法分析
(1)使用 Sequential()函数作为模型。
(2)建立一个有 15 个神经元,并采用 relu 函数作为激活函数的全连接层。**这里不使用其他函数的原因为防止梯度弥散。**
(3)建立一个有 10 个神经元,并采用 softmax 函数作为激活函数的一个输入层。
2. complexDemo.py
稍复杂的程序
- 搭建神经网络
![](https://www.writebug.com/myres/static/uploads/2021/11/20/61cc54bd6c98ddb7eb0326e23e59bf13.writebug)
- 算法分析
使用卷积神经网络进行训练
(1)添加三个卷积层
(2)每个卷积层之间添加了一个均值池化。
(3)添加一个 Flatten 层,用于由卷积层向全连接层过渡。
(4)最后添加一个全连接层
3. finalDemo.py
最终程序
- 搭建神经网络
![](https://www.writebug.com/myres/static/uploads/2021/11/20/ac744af1e14117fcd1f8c71c8930750f.writebug)
- 算法分析
同样使用卷积神经网络进行训练
(1)添加四个卷积层
(2)采用两个最大池化层
(3)添加 Dropout 层防止过拟合
(4)添加 Flatten 层,用于由卷积层向全连接层过渡。
(5)添加了梯度下降优化器。
## 四、结果分析
```python
epochs=50
```
三个 Demo 均采用 50 个回合进行训练
```python
test_loss, test_accuracy = network.evaluate(test_images, test_labels)
print("test_loss:", test_loss, " test_accuracy:", test_accuracy)
```
采用 network.evaluate()评估函数输出 测试集损失和测试集准确率,训练集损失以及训练集准确率。
1. simpleDemo.py
![](https://www.writebug.com/myres/static/uploads/2021/11/20/bfbbc33430abe1be8e67d9968c4b0571.writebug)
可以发现 simpleDemo 的预测准确性并不是很高,仅有 92% 左右。
2. complexDemo.py
![](https://www.writebug.com/myres/static/uploads/2021/11/20/1aeeb5f330bac44d02f5ca717132492b.writebug)
预测准确性可以达到 99% 左右,但是仍然存在着过拟合的情况。
3. finalDemo.py
![](https://www.writebug.com/myres/static/uploads/2021/11/20/71a1346d39d7ba1baba1c8342b9539da.writebug)
在 Kaggle 提供的测试集和训练集上训练效果较好,测试集上的准确性能够达到 99.55% 左右,最终在 Kaggle 上的效果也证明了此算法较好。
![](https://www.writebug.com/myres/static/uploads/2021/11/20/11300653205f679aed92eba8886bad9b.writebug)
计算机毕设论文
- 粉丝: 1w+
- 资源: 394
最新资源
- 基于STM32F103的密码检测串口通信实现及功能详解:上电版权验证、按键响应、密码锁定与文件选择显示功能,基于STM32F103的密码检测串口通信 包括源代码、仿真 功能 上电打印版权信息 按任意
- MATLAB遗传算法GA求解函数极值问题的demo:实数编码、非均匀变异与轮盘选择策略,适合初学者快速上手,MATLAB环境下,运用遗传GA算法求解函数极值问题demo代码,采用实数编码方式,非均匀变
- 魔术公式在制动转向联合工况下的椭圆曲线应用研究,魔术公式 制动转向联合工况 椭圆曲线 ,核心关键词:魔术公式; 制动转向联合工况; 椭圆曲线 ,"魔术公式下制动转向联合工况的椭圆曲线分析"
- C#松下PLC通信工具:基于MEWTOCOL协议,支持串口与网口通信,实现IO及DT数据实时监控与自由操作,C#松下PLC通信工具,支持松下MEWTOCOL协议,支持串口通信,网口通信,部分代码稍作修
- 西威变频器主板底座图纸:原厂原设计avo avs avy avgl细节解析与工艺解读,西威变频器主板底座图纸avo avs avy avgl原厂原 ,核心关键词:西威变频器; 主板底座图纸; AVO
- 三菱FX3U与称重仪的8工位重量记录与FTP下载管理程序 通过MODBUS专用指令实现可靠通信与错误处理,三菱FX3U与8和称重仪通信的程序 主要功能是记录8个工位的重量,用威纶通FTP服务器下载到
- 开关电源方案:高效率LLC电源图纸,含原理图PCB设计,输出24V与48V双路输出,功率达550W,开关电源方案550w高效率LLC电源图纸24V7.5A+48V7.5A 包含原理图pcb ,核心关
- 粒子群遗传算法与灰狼磷虾群算法对比分析:智能优化技术的实践与探索,粒子群 遗传 灰狼 磷虾群算法matlab 擅长各种智能算法程序,可实现传统算法和改进算法对比分析,可以实现单目标和多目标,并生成帕累
- 伺服7系完整方案资料:包括代码原理图与详细说明书,内容丰富、资料全面,实用高效可直观套用,伺服中的7系完整方案,代码原理图,说明资料,非常全,1G多完整工程 可直接用 ,核心关键词:伺服7系完整方
- 西门子PLC S7-1200与Modbus RTU通讯下的变频器及电子称温度控制方案-详尽项目资料与教程注释,上手无忧,西门子PLC S7-1200和变频器Modbus RTU 通 讯,有自录4平
- 基于上位机软件的源码解析及通讯协议探究:解读数字时代的通讯革命,上位机软件源码 485通讯 ,上位机软件源码; 485通讯; 通信协议; 编程语言; 串行通信 ,上位机485通讯源码:智能通讯与软件解
- 量产新能源汽车控制器代码合集:功能全面,含原理图,编译无障碍,正在量产的新能源汽车控制器代码,功能齐全,含原理图 完美可编译 ,核心关键词:新能源汽车控制器代码; 功能齐全; 原理图; 完美可编
- MATLAB轴承故障诊断程序:基于西楚凯斯大学数据集的VMD算法与包络谱分析诊断技术,MATLAB滚动轴承故障诊断程序:采用西楚凯斯大学数据,首先通过变分模态分解(VMD)算法处理,而后分别通过包络谱
- Labview振动与声音分析软件:源代码全开放,功能强大,专业分析利器,labview振动,声音分析软件,提供源代码 ,核心关键词:LabVIEW振动分析; 声音分析软件; 提供源代码 ,"Lab
- "力士乐伺服编程调试软件中文版三款:IndraWorks MTX13V16与driver Top双中文化,另有一款IndraWorks DS为英文版,支持Win7及Win10系统安装使用",力士乐伺服
- 英飞凌TC27xC平台电动汽车参考方案:原理图、BOM清单、说明文档与代码集成方案,英飞凌电动汽车参考方案,包含原理图,和Bom清单,说明文档和代码,基于英飞凌TC27xC平台 ,核心关键词:英飞
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈