Skip to content

基于tensorflow搭建神经网络进行mnist手写体识别

Notifications You must be signed in to change notification settings

Leo4ML/mnist_tensorflow

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

18 Commits
 
 
 
 

Repository files navigation

基于tensorflow的手写体分类模型

本项目以mnist手写体作为数据集,基于·tensorflow·来构建一个多分类模型。

数据集是28*28像素的手写体图片,对应0~9十个数字。

构建神经网络

单批次训练数据为batch_size=100
不加隐藏层,直接输入层到输出层,测试集准确率为87%
添加复杂隐藏层两层(2000个神经元、1000个神经元)进行训练,不加dropout,训练三十一次(写本文档时,才跑到第6次,测试集准确率96%,训练集准确率99%,有过拟合现象)

将dropout分别设置成0.6和0.7,前者在第十二次训练后, 训练准确率92.79%,测试准确率92.81%,基本没有过拟合
后者第十二次训练后,训练准确率94.69%,测试准确率94.19&,也基本没有过拟合。但是准确度提高了2%(dropout只是0.1的差别)。

尝试不同优化器eg:AdamOptimizier,学习率从GradientDescent的0.1改为0.01,训练速度加快非常多(尝试过学习率不变,准确度非常低)。
在不同的优化器里,SGD,Momentunm、NAG、Adagrad、Adadelta、Rmsprop中,SGD速度最慢,而且无法逃离鞍点。其余的(Adadelta速度最快)速度都很快,皆可逃离鞍点。

经验总结,训练速度越快的优化器,它的学习率应该设置0.01以下,防止准确率过低。

为何我们依旧使用SGD最多?因为我们并不是只追求速度,准确率才是王道。

以下是部分数据展示:
#####AdamOptimizer学习率0.003:
第9次训练准确率为:0.943836测试准确率为:0.9431 第24次训练准确率为:0.944873测试准确率为:0.942
#####AdadeltaOptimizer学习率0.003:
第9次训练准确率为:0.292891测试准确率为:0.298
第24次训练准确率为:0.416909测试准确率为:0.4223
#####AdadeltaOptimizer学习率0.007:
第9次训练准确率为:0.492691测试准确率为:0.5001
第24次训练准确率为:0.629491测试准确率为:0.63
#####AdadeltaOptimizer学习率0.01:
第9次训练准确率为:0.503545测试准确率为:0.5063
第24次训练准确率为:0.669727测试准确率为:0.6771
#####AdadeltaOptimizer学习率0.03:
第9次训练准确率为:0.713036测试准确率为:0.7188
第24次训练准确率为:0.835491测试准确率为:0.8338 #####AdagradOptimizer学习率0.003: 第9次训练准确率为:0.699273测试准确率为:0.7036
第24次训练准确率为:0.851836测试准确率为:0.8558
#####AdagradOptimizer学习率0.03:
第9次训练准确率为:0.911345测试准确率为:0.9146 第24次训练准确率为:0.932255测试准确率为:0.9317 #####MomentumOptimizer学习率0.003 动力0.9: 第9次训练准确率为:0.864345测试准确率为:0.867
第24次训练准确率为:0.904455测试准确率为:0.9055

About

基于tensorflow搭建神经网络进行mnist手写体识别

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages