TensorFlow实现CNN卷积神经网络对手写数字集mnist的模型训练

mnist手写数字集相当于是TensorFlow应用中的Helloworld。

在学习了TensorFlow的卷积神经网络应用之后,今天就分步解析一下其应用过程

 一、mnist手写数字数据集


        MNIST是深度学习的经典入门demo,他是由6万张训练图片和1万张测试图片构成的,每张图片都是28*28大小(如下图),而且都是黑白色构成(这里的黑色是一个0-1的浮点数,黑色越深表示数值越靠近1),这些图片是采集的不同的人手写从0到9的数字。TensorFlow将这个数据集和相关操作封装到了库中

 我们可以访问官方网站进行数据下载,当然也可以通过TensorFlow进行调用:

http://yann.lecun.com/exdb/mnist/

       注意下载的时候要将4个红色的包全部下载好。 

 

二、我们要构建一个什么样的卷积神经网络


        上面的这张图,就是我们将要构建的卷积神经网络,我们的构建步骤是:

  •         输入28*28*1的数据集
  •         第一个红色方块,代表第1层卷积,下面是它的相关参数,形状变为[28, 28, 32];
  •         第一个绿色方块,代表第1层池化,或者是亚采样,下方是它的相关参数,形状变为[14, 14, 32];
  •         第二个红色方块,代表第2层卷积,下面是它的相关参数,形状变为[14, 14, 64];
  •         第二个绿色方块,代表第2层池化,或者是亚采样,下方是它的相关参数,形状变为[7, 7, 64];
  •         进行平坦化,形成1024神经元的全连接层,形状为[1, 1, 1024];
  •         丢弃50%,即使rate=0.5;
  •         形成10个神经元的全连接层,输出形状[1, 1, 10]

        这就是我们构建的一个简单的卷积神经网络。

利用tensorflow实现卷积神经网络来进行MNIST手写数字图像的分类。 #导入numpy模块 import numpy as np #导入tensorflow模块,程序使用tensorflow实现卷积神经网络 import tensorflow as tf #下载mnist数据,并从mnist_data目录中读取数据 from tensorflow.examples.tutorials.mnist import input_data mnist = input_data.read_data_sets('mnist_data',one_hot=True) #(1)这里的“mnist_data” 是和当前文件相同目录下的一个文件夹。自己先手工建立这个文件夹,然后从https://yann.lecun.com/exdb/mnist/ 下载所需的4个文件(即该网址中第三段“Four files are available on this site:”后面的四个文件),并放到目录MNIST_data下即可。 #(2)MNIST数据手写数字字符的数据。每个样本都是一张28*28像素的灰度手写数字图片。 #(3)one_hot表示独热编码,其值被设为true。在分类问题的数据标注时,如何不采用独热编码的方式, 类别通常就是一个符号而已,比如说是9。但如果采用独热编码的方式,则每个类表示为一个列表list,共计有10个数值,但只有一个为1,其余均为0。例如,“9”的独热编码可以为[00000 00001]. #定义输入数据x和输出y的形状。函数tf.placeholder的目的是定义输入,可以理解为采用占位符进行占位。 #None这个位置的参数在这里被用于表示样本的个数,而由于样本个数此时具体是多少还无法确定,所以这设为None。而每个输入样本的特征数目是确定的,即为28*28。 input_x = tf.placeholder(tf.float32,[None,28*28])/255 #因为每个像素的取值范围是 0~255 output_y = tf.placeholder(tf.int32,[None,10]) #10表示10个类别 #输入层的输入数据input_x被reshape成四维数据,其中第一维的数据代表了图片数量 input_x_images = tf.reshape(input_x,[-1,28,28,1]) test_x = mnist.test.images[:3000] #读取测试集图片的特征,读取3000个图片 test_y = mnist.test.labels[:3000] #读取测试集图片的标签。就是这3000个图片所对应的标签
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AlexGeek

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值