通俗直白讲解卷积神经网络(CNN),以及利用tensorflow+CNN实现手写数字(MNIST)分类的代码实现

注:假设已经懂了简单神经网络

1. 卷积神经网络

卷积神经网络(Convolutional Neural Network, CNN)是一种前馈神经网络,它的人工神经元可以响应一部分覆盖范围内的周围单元,对于大型图像处理有出色表现。

卷积神经网络由一个或多个卷积层和顶端的全连通层(对应经典的神经网络)组成,同时也包括关联权重和池化层(pooling layer)。这一结构使得卷积神经网络能够利用输入数据的二维结构。与其他深度学习结构相比,卷积神经网络在图像和语音识别方面能够给出更好的结果。这一模型也可以使用反向传播算法进行训练。相比较其他深度、前馈神经网络,卷积神经网络需要考量的参数更少,使之成为一种颇具吸引力的深度学习结构。

2、为什么要进行使用卷积神经网络?

俗话说: “认人先认脸”, 是不是大概其中的含义了, 没理解的话不要紧.
先不用想计算机中是如何实现的,我们在生活中总会有这些场景, 看远处走来的人,总是先看脸识别人(看腿的都是老司机,呵呵!), 因为脸是一个人最明显的特征,在大脑进化过程中已经学到了这点先验知识,所以直接就看脸识别人了,但是计算机可就不这么聪明了,它要识别一个手写数字是几(1?,2?,3?,还是其他识别动物(猫,狗等)),它就会把整个图片做一次运算.

那么问题来了, 对于一张图片(手写数字),它的大小是28*28(像素), 那么识别一遍的过程中就要逐个像素进行计算,最终得到整个图片的特征,然后分出是具体的那个数字,或者是那种动物。那最终的问题就是:

识别图片就要 提取特征, 根据特征分类。放出一张总结图:

这里写图片描述

3、具体如何操作呢?

看了上面的图,第一感觉就是把一张图片最终变成了一个向量,然后经过神经网络进行了计算,最终分类,是的,就这样。
进行的第一步操作就是

3.1:卷积

卷积:通过两个函数 f(x) f ( x ) g(x) g ( x ) 生成第三个函数的一种数学算子,表征函数f和g经过翻转和平移的重叠部分的面积,数学定义为:

H(x)=f(x)
利用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个图片所对应的标签
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

@RichardWang

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

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

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

打赏作者

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

抵扣说明:

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

余额充值