Tensorflow实现卷积神经网络

1.卷积神经网络简介

卷积神经网络网络(CNN)最初是为解决图像识别等问题设计的。在深度学习之前,主要借助SIFT。HoG等算法提取图像的特征,再结合SVM等机器学习算法进行图像识别。CNN被作为一个深度学习的架构降低了对图像数据预处理的要求,避免了复杂的特征工程,CNN可以直接使用图像的原始像素作为输入,在训练时自动提取最有效的特证。
在卷积神经网络中,第一个卷积层会直接接受图像像素级的输入,每一个卷积操作只处理一小块图像,进行卷积变化后再传到后面的网络,每一层卷积(即每一个滤波器)都会提取数据中最基础的特征,而后进行组合和抽象形成高阶特征。
一般卷积神经网络由多个卷积层组成,每个卷积层中通常会进行以下几个操作:
(1)图像通过多个不同的卷积核的滤波,并加偏置提取出局部特征,每一个卷积核会映射出一个新的2D图像。
(2)将前面卷积核的滤波输出结果,进行非线性的激活函数处理
(3)对激活函数的结果再进行池化操作(即降维采样,比如将2*2将为1*1的图片),目前一般使用最大池化,保留最显著的特征。
一个卷积层中可以有多个不同的卷积核,而每一个卷积核都对应一个滤波后映射出的新图像,新图像的每一个像素都来自同一个卷积核,这就是卷积核的权值共享。
神经网络
上图是传统的神经网络结构图,对于一个1000*1000的输入图像而言,如果下一个隐藏层的节点数为100,神经网络采用全连接需要1000*1000*100=1000万个权值参数。卷积神经网络使用10*10的滤波器进行卷积(局部连接),那么需要10*10*100=1万的权值参数。

1.1 卷积层

卷积:卷积操作是使用一个卷积核与图像对应区域进行内积得到一个值,然后不断的移动卷积核完成对整个图像的卷积。
深度:深度决定卷积核的个数,一般图像都是3通道,即深度为3,则有3个卷积核作用在图像的同一块区域。
步长:步长是卷积核每次移动多少个像素点。
在这里插入图片描述
上图是卷积层的操作例子,输入数据是一个3通道数据,因此卷积层每个深度节点都有一个卷积核分别与3个通道进行卷积得到3个值,然后再把这三个值和偏置求和就得到节点的值.
第一个节点的计算
第一通道的卷积核A与图像的内积:
0*0 +0*0 +0*-1 +
0*1+1*0+2*0 +
0*0+1*0+0*1 +
1(偏置)
=1
第二通道的卷积核B与图像的内积:
0*0+0*1+0*-1+
0*-1+0*1+2*-1+
0*0+2*-1+2*0+
0
=-4
第三通道的卷积核C与图像的内积:
0*0+0*1+0*-1+
0*1+0*-1+1*0+
0*0+2*0+0*-1+
0
=0
图像的节点值:1-4+0=-3(三个通道卷积后的值相加)
然后以步长为2来移动窗口,重复上面的卷积运算完成整个图像的卷积。得到了卷积层每层深度的特征图后,将这些特征图输入到激活函数中,CNN常采用RELU激活函数

1.2 池化层

池化层夹在连续的卷积层之间,用于压缩数据和参数的量,减小过拟合。即如果输入是图像,则池化层的主要作用是压缩图像。
池化层的方法有:
最大池化(Max Pooling)。取4个点的最大值。这是最常用的池化方法。
均值池化(Mean Pooling)。取4个点的均值。
可训练池化。训练函数 f ,接受4个点为输入,出入1个点。
池化层操作

1.3 全连接层

全连接层主要用来进行学习,和传统的BP神经网络类似。

2 LeNet5卷积神经网络模型

LeNet5这个网络虽小,但它包含了深度学习的基本模块:卷积层,池化层,全连接层。是其他深度学习模型的基础,接下来对LeNet5进行深入分析。

在这里插入图片描述
它的输入图像为32*32的灰度值图像,后面有三个卷积层,一个全连接层和一个高斯连接层。
1、C1层-卷积层
输入图片:32*32
卷积核大小:5*5
卷积核个数:6(有6个不同的特征图)
输出的特征图:28*28 (32-5+1=28,步长为1,(原大小-卷积核大小)/卷积步长)
神经元数量:28*28*6(所有的像素点)
可训练参数:(55+1)6 =156(每个滤波器5*5=25个参数和一个偏置bias参数,一共6个滤波器)
连接数:28*28*(5*5+1)*6=122304
有122304个连接,但我们只需训练156个参数,主要是通过权值共享实现的(28*28)*(5*5+1)=20384个连接共享一个权值(滤波器)
2 、S2层-池化层(下采样层)
输入图像:28*28
采样区域:2*2
采样方式: 4个输入相加,乘以一个可训练参数,再加上一个可训练偏置。结果通过sigmoid
采样种类:6(6个featuremap)
输出特征图像:14*14 (28/2=14)
神经元数量:14*14*6=1176
S2中每个特征图的大小是C1中特征图大小的1/4.
3、C3层-卷积层
输入图像:S2中所有6个特征图或其中几个特征图
卷积核大小:5*5
卷积核数量:16
输出特征图大小:10
10 (14-5+1=10)
第二次卷积层的输出是16个10*10的特征图,卷积核的大小是5
5.我们知道S2有6个14*14的特征图,怎么从6个特征图得到16个特征图?这里是对S2的特征图的组合计算得到16个特征图。具体如下:
C3层的前6个特征图与S2层相连的3个特征图相连接,结构图如下:
在这里插入图片描述
上图对用的参数为(3*5*5+1)*6,3是指C3层的第0到第5个特征图是3通道的。有6个[5*5*3]的卷积核。
C3层接下来的6个featuremap与S2层相邻的4个特征图相连接,C3层的第6到第11张特征图是4通道的,所以有(4*5*5+1)*6个参数。
C3层接下来的3个特征图与S2层不相邻的4个特征图相连接,C3层的第12到第14张featuremap也是4通道的,共有(4*5*5+1)*3个参数。
C3层最后一个将S2中所有特征图作为输入,最后一个是6通道的,共有(655+1)1个参数。
4、S4层-池化层
输入图像:10*10
采样区域:2*2
采样方式:4个输入相加,乘以一个可训练参数,再加上一个可训练偏置,结果通过sigmoid
采样种类:16
输出的特诊图像大小:5*5(10/2=5)
神经元数量:5*5*16=400
S4中每个特征图的大小是C3中特征图的1/4
5、C5层-卷积层
输入特征图:S4层的全部16个5
5的featuremap
卷积核大小:5*5
卷积核种类:120
输出featuremap大小:1*1(5-5+1=1)
可训练的参数数量:(5516+1)120(因为S4层有16个特张图,每一个卷积核给不同的特征图设不同的权值,所以卷积核大小是[5*5*16])。
在这里插入图片描述
6、F6层-全连接层
输入:C5层 120维向量
计算方式:计算输入向量和权重之间的点击,再加偏置,结果通过sigmoid函数输出。6层是全连接层,F6层有84个节点,对应于一个7*12的比特图。
7、Output层-全连接层
Output层也是全连接层,共有10个节点,分别代表数字0到9,且如果节点i的值为0,则网络识别结果是数字i,采用的是径向基函数(RBF)的网络连接方式,假设x是上一层的输入,y是RBF的输出,则RBF输出的计算是 在这里插入图片描述
上式w_ij的值由i的比特图编码确定,i从0到9,j取值从0到7
12-1.RBF输出的值越接近于0,则越接近于i,即越接近于i的ASCII编码图,表示当前网络输入的识别结果是字符i,该层有84*10=840个参数和连接

在这里插入图片描述
上图是LeNet5识别数字3的过程。

3 Tensorflow实现简单的卷积神经网络

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值