实现卷积_用卷积神经网络实现MNIST数据集分类

在这节的内容中,我们用之前讲述的内容来搭建一个比较简单的卷积神经网络,实现MNIST手写数字体数据集的图片分类。

我们给出本次实验的CNN网络参数配置如下:

原始数据:输入为[28,28],输出为[1,10]

卷积核1:[5,5],32个特征 -->28*28*32

池化核1:[2,2],最大池化 -->14*14*32

卷积核2:[5,5],2个特征 -->14*14*64

池化核2:[2,2],最大池化 -->7*7*64

全连接1:[7*7*64,1024]

全连接2:[1024,10]

输出: [1,1,10]

首先我们载入MNIST数据集,设置批处理大小,one_hot指的是独热码的编码(encoding)形式,有关于独热编码大家可以自己搜索下相关内容。

实现卷积_用卷积神经网络实现MNIST数据集分类_第1张图片

下面是定义初始卷积层函数和池化层函数,卷积层的输入是我们的图片大小,由于利用了填充,所以最后输出的还是原来的图片大小,28x28,只不过图片的通道数变大了,成了32,我们可以理解为图片的横截面变”厚”了;然后经过一层池化层的时候,图片大小成了14x14的;再经过第二次卷积层的时候,跟第一层的原理一样,图片的长宽不变,厚度增加,再经过第二次池化层的时候,图片的大小由[14,14,64]变为[7,7,64]大小

实现卷积_用卷积神经网络实现MNIST数据集分类_第2张图片

之后就是一层全连接层,全连接层相当于把一张图片直接给”拉长”成1x1x1024大小

实现卷积_用卷积神经网络实现MNIST数据集分类_第3张图片

tf.layers.dropout()也就是之前提到过的dropoout,意思是每个元素被保留的概率,rate=1就是所有元素全部保留的意思,其目的是为了防止过拟合,就是对全连接层进行一个随机保留输出

实现卷积_用卷积神经网络实现MNIST数据集分类_第4张图片

定义我们的损失函数,这里用到的是tf.reduce_mean()函数,这个函数用于计算张量tensor沿着指定的数轴(tensor的某一维度)上的平均值,主要是用来降维或者计算tensor的平均值。括号中的tf.losses.softmax_cross_entropy()是用来计算交叉熵的函数,用Adam优化器来最小化误差,学习率设置为0.01然后用accuracy来计算最后的准确率,然后对所有变量进行初始化。

实现卷积_用卷积神经网络实现MNIST数据集分类_第5张图片

接下来就是创建会话了,总共是5000步,每一次训练100步,总共是50个epoch,最后输出的结果如下图所示:

实现卷积_用卷积神经网络实现MNIST数据集分类_第6张图片

可以看到现在第5000步的训练已经有97%的精度了,且推测和生产的数字也是一样的。

总结:本次的内容主要是用卷积神经网络做手写数字体识别分类的实验,自己也可以动手做一做,这样可以加强对过程中每一个步骤的理解。

关注小鲸融创,一起深度学习金融科技!

实现卷积_用卷积神经网络实现MNIST数据集分类_第7张图片

你可能感兴趣的:(实现卷积)