tensorflow基于CNN实战mnist手写识别(小白必看)


Posted in Python onJuly 20, 2020

很荣幸您能看到这篇文章,相信通过标题打开这篇文章的都是对tensorflow感兴趣的,特别是对卷积神经网络在mnist手写识别这个实例感兴趣。不管你是什么基础,我相信,你在看完这篇文章后,都能够完全理解这个实例。这对于神经网络入门的小白来说,简直是再好不过了。

tensorflow基于CNN实战mnist手写识别(小白必看)

通过这篇文章,你能够学习到

  • tensorflow一些方法的用法
  • mnist数据集的使用方法以及下载
  • CNN卷积神经网络具体python代码实现
  • CNN卷积神经网络原理
  • 模型训练、模型的保存和载入

Tensorflow实战mnist手写数字识别

关于这个mnist手写数字识别实战,我是跟着某课网上的教学视频跟着写的

需要导入的包

import numpy as np
import tensorflow as tf
from tensorflow.examples.tutorials.mnist import input_data #mnist数据用到的包

下载mnist数据

mnist = input_data.read_data_sets('mnist_data',one_hot=True)

通过这一行代码,就可以将mnist数据集下载到本地文件夹mnist_data目录下,当然,你也可以使用绝对地址下载你想要下载的地方。这里需要注意一点是,如果第一次运行程序,由于需要下载资源的缘故,故需要一段时间,并且下载过程是没有提示的,之后下载成功时 才会提示 Success xxxxxx 。另一种方式就是直接去官网下载数据集
mnist官网 进去点击就可以直接下载了。

张量的声明

input_x = tf.compat.v1.placeholder(tf.float32,[None,28*28],name='input_x')#图片输入
output_y = tf.compat.v1.placeholder(tf.int32,[None,10],name='output_y')#结果的输出
image = tf.reshape(input_x,[-1,28,28,1])#对input_x进行改变形状,

稍微解释一下
[-1,28,28,1] -1表示不考虑输入图片的数量,28*28是图片的长和宽的像素值,1是通道数量,由于原图片是黑白的 ,所以通道是1,若是彩色图片,应为3.

取测试图片和标签

test_x = mnist.test.images[:3000]
test_y = mnist.test.labels[:3000]

[:3000]表示从列表下标为0到2999 这些数据
[1:3] 表示列表下标从1到2 这些数据

卷积神经网络第一层卷积层(用最通俗的言语告诉你什么是卷积神经网络)

#第一层卷积
conv1 = tf.layers.conv2d(inputs=image,#输入
  filters=32,#32个过滤器
  kernel_size=[5,5],#过滤器在二维的大小是5*5
  strides=1,#步长是1
  padding='same',#same表示输出的大小不变,因此需要补零
  activation=tf.nn.relu#激活函数
 )#形状[28,28,32]

第二层池化层

pool1 = tf.layers.max_pooling2d(
  inputs=conv1,#第一层卷积后的值
  pool_size=[2,2],#过滤器二维大小2*2
  strides=2 #步长2
)#形状[14,14,32]

第三层卷积层2

conv2 = tf.layers.conv2d(inputs=pool1,
  filters=64,
  kernel_size=[5,5],
  strides=1,
  padding='same',
  activation=tf.nn.relu
)#形状[14,14,64]

第四层池化层2

pool2 = tf.layers.max_pooling2d(
  inputs=conv2,
  pool_size=[2,2],
  strides=2
)#形状[7,7,64]

平坦化

flat = tf.reshape(pool2,[-1,7*7*64])

使用flat.shape 输出的形状为(?, 3136)

1024个神经元的全连接层

dense = tf.layers.dense(inputs=flat,units=1024,activation=tf.nn.relu)

tf.nn.relu 是一种激活函数,目前绝大多数神经网络使用的激活函数是relu

Droupout 防止过拟合

dropout = tf.layers.dropout(inputs=dense,rate=0.5)

就是为了避免训练数据量过大,造成过于模型过于符合数据,泛化能力大大减弱。

10个神经元的全连接层

logits = tf.layers.dense(inputs=dropout,units=10,name="logit_1")

计算误差,使用adam优化器优化误差

#计算误差,使用交叉熵(交叉熵用来衡量真实值和预测值的相似性)
loss = tf.losses.softmax_cross_entropy(onehot_labels=output_y,logits=logits)
#学习率0.001 最小化loss值,adam优化器
train_op = tf.train.AdamOptimizer(learning_rate=0.001).minimize(loss)

计算精度值

accurary = tf.metrics.accuracy(
   labels=tf.argmax(output_y,axis=1),
   predictions=tf.argmax(logits,axis=1),)[1]

创建会话,初始化变量

sess = tf.compat.v1.Session()#创建一个会话
#初始化全局变量和局部变量
init = tf.group(tf.global_variables_initializer(), tf.local_variables_initializer())
sess.run(init)

基本上到这里,这个程序就完成了,不过你也可以在此基础上加上一些数据的输出,使其更容易显示整个训练的过程。
比如我加上了这一段

for i in range(1000):
 #获取以batch_size为大小的一个元组,包含一组图片和标签
 batch = mnist.train.next_batch(50)
 train_loss,train_op_,logits_output = sess.run([loss,train_op,logits],{input_x:batch[0],output_y:batch[1]})
 if i % 100 == 0:
  test_accuracy = sess.run(accurary,{input_x:test_x,output_y:test_y})
  print(("step=%d,Train loss=%.4f,[Test accuracy=%.2f]") \
    % (i, train_loss, test_accuracy))

输出为:

tensorflow基于CNN实战mnist手写识别(小白必看)

完整的代码数据文件我整理到了GitHub 下载地址 大家如果觉得可以的话,可以给个⭐

下面就回答一些我在学习过程中的遇到的问题:

【问】如何开始学习tensorflow,小白如何入门?
【答】 我的建议是先找到自己感兴趣的点,从这个点出发,通过实践将自己不明白的方法原理通过看官网,看博客,查百度,一一解决。文章开头的那个视频,我认为作为入门还不错,最好再有一本tensorflow相关书籍结合着来。

【问】 CNN卷积神经网络的流程是什么,其中的转化是什么样的?
【答】主要涉及的知识就是数组之间的计算,具体关于我对卷积神经网络的理解,可以参考这篇博客 最易懂-CNN卷积神经网络运行原理和流程

【问】训练好的模型如何保存或者直接拿来使用呢?
【答】具体看我的另一篇博客 模型的保存和使用 也是通过这个例子,教你如何保存模型和使用模型

【问】为什么中间有出现两次卷积层,两次池化层?
【答】这个不是必须的,有的比较复杂的模型需要很多层,每一层都是对上一层特征的提取,只是这个就是比较基本的模型,都是使用两次。初次咱们学习的话,就使用两次就够了,后面学习的知识多了,就可以自己根据实际情况加了。

【问】为什么全连接层有两个,里面的神经元数是固定的吗?
【答】有几个全连接层不是固定的,你就可以理解,这个全连接层就是做最后的收尾工作的,就是将前面几个层所提取到的信息,最后进行汇总 并显示,所以,最后一个全连接层的神经元必须是10,由于本次使用的ont-hot (独热码)的形式来表示图片的label,所以最后一个输出的神经元个数必须是10.至于前面的,大家可以尝试多使用几个尝试一下。
【问】one_hot独热码在咱们这个程序中是怎么使用的?
【答】其实我也是头一次听说这个编码(我是小白),举个例子吧。
0:1000000000
1:0100000000
2:0010000000
就是这种

到此这篇关于tensorflow基于CNN实战mnist手写识别(小白必看)的文章就介绍到这了,更多相关tensorflow mnist手写识别内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python的迭代器和生成器使用实例
Jan 14 Python
Python实现图像几何变换
Jul 06 Python
Python 搭建Web站点之Web服务器网关接口
Nov 06 Python
python中文件变化监控示例(watchdog)
Oct 16 Python
JS设计模式之责任链模式实例详解
Feb 03 Python
Python Json模块中dumps、loads、dump、load函数介绍
May 15 Python
Python3之简单搭建自带服务器的实例讲解
Jun 04 Python
python自动化测试之DDT数据驱动的实现代码
Jul 23 Python
Python IDE Pycharm中的快捷键列表用法
Aug 08 Python
通过案例解析python鸭子类型相关原理
Oct 10 Python
python 多线程爬取壁纸网站的示例
Feb 20 Python
教你怎么用python实现字符串转日期
May 24 Python
基于python实现生成指定大小txt文档
Jul 20 #Python
python中upper是做什么用的
Jul 20 #Python
Pytorch框架实现mnist手写库识别(与tensorflow对比)
Jul 20 #Python
python集合能干吗
Jul 19 #Python
python如何建立全零数组
Jul 19 #Python
解决python中0x80072ee2错误的方法
Jul 19 #Python
python给视频添加背景音乐并改变音量的具体方法
Jul 19 #Python
You might like
用PHP编写PDF文档生成器
2006/10/09 PHP
很实用的一个完整email发送程序
2006/10/09 PHP
FleaPHP的安全设置方法
2008/09/15 PHP
PHP添加Xdebug扩展的方法
2014/02/12 PHP
PHP中抽象类、接口的区别与选择分析
2016/03/29 PHP
PHP读书笔记_运算符详解
2016/07/01 PHP
利用php-cli和任务计划实现订单同步功能的方法
2017/05/03 PHP
关于extjs treepanel复选框选中父节点与子节点的问题
2013/04/02 Javascript
javascript实现的弹出层背景置灰-模拟(easyui dialog)
2013/12/27 Javascript
浅谈window对象的scrollBy()方法
2015/07/15 Javascript
不得不分享的JavaScript常用方法函数集(上)
2015/12/23 Javascript
jQuery实现ajax的叠加和停止(终止ajax请求)
2016/08/08 Javascript
ES6记录异步函数的执行时间详解
2016/08/31 Javascript
Angularjs通过指令监听ng-repeat渲染完成后执行脚本的方法
2016/12/31 Javascript
jquery.zclip轻量级复制失效问题
2017/01/08 Javascript
JavaScript中严格判断NaN的方法
2018/02/16 Javascript
JS Thunk 函数的含义和用法实例总结
2020/04/08 Javascript
Node.js API详解之 net模块实例分析
2020/05/18 Javascript
nginx部署多个vue项目的方法示例
2020/09/06 Javascript
Vue.js桌面端自定义滚动条组件之美化滚动条VScroll
2020/12/01 Vue.js
[54:53]2014 DOTA2国际邀请赛中国区预选赛 LGD-GAMING VS CIS 第二场
2014/05/23 DOTA
python使用pil生成缩略图的方法
2015/03/26 Python
基于python list对象中嵌套元组使用sort时的排序方法
2018/04/18 Python
Python利用正则表达式实现计算器算法思路解析
2018/04/25 Python
基于python计算并显示日间、星期客流高峰
2020/05/07 Python
Python OpenCV去除字母后面的杂线操作
2020/07/05 Python
Python selenium爬取微信公众号文章代码详解
2020/08/12 Python
戴尔美国官方折扣店:Dell Outlet
2018/02/13 全球购物
爱尔兰领先的在线体育用品零售商:theGAAstore
2018/04/16 全球购物
Fossil美国官网:化石手表、手袋、首饰及配饰
2019/02/17 全球购物
犯错检讨书
2014/02/21 职场文书
移风易俗倡议书
2014/04/15 职场文书
敬老院献爱心活动总结
2014/07/08 职场文书
员工安全责任协议书
2016/03/22 职场文书
2019最新版火锅店的创业计划书 !
2019/07/12 职场文书
springBoot基于webSocket实现扫码登录
2021/06/22 Java/Android