卷积神经网络.经典神经网络模型之LeNet-5

卷积神经网络.经典神经网络模型之LeNet-5_第1张图片

LeNet-5

论文阅读地址:http://yann.lecun.com/exdb/publis/pdf/lecun-98.pdf ,虽然看不懂 ==!看图就行了 : )

在上图中包含的网络结构有八层,分别为:

输入层(INPUT)、卷积层(Convolutions,C1)、池化层(Subsampling,S2)、卷积层(C3)、池化层(Subsampling,S4)、卷积层(C5)、全连接层(F6)、输出层(径向基层)

注:这里的Subsampling 字面意思是下采样层,也就是池化层

输入层(INPUT):

输入的灰度图像维度为32*32*1

卷积层(Convolutions,C1):

表示卷积层1,由6个特征图feature maps构成(即我们可以滤波器filters有6个),每个特征图的神经元数量为28*28个,特征图中的每一个神经元与5*5的卷积核做卷积(32-5+1=28)

C1层总共的可训练的参数为:

每个滤波器的参数为26(权重参数5*5=25个和一个偏置参数bias,因为滤波器的通道数为1,所以(25+1)*1=26个),有六个滤波器,则总共需要训练的参数为 26*6=156个

C1层总共拥有的连接数为 (5*5+1)*6*28*28=122304个

池化层(Subsampling,S2):

池化层又称下采样层,目的是压缩数据降低数据维度,减小输出图像数据量来提高计算速度,这里使用的平均池化 Average Pooling

S2层由6个16*16的特征图组成,特征图的每个神经单元与C1中相对应特征图的2*2的选择框相连接,通过C1中选择框中的数据求和再取平均值然后在乘上一个权重值和加上一个偏置值所得到,每个特征图采样的权值和偏置值都是一样的,因此每个特征图对应的采样层只两个待训练的参数。每个神经单元所对应的2*2感受野并不重叠,S2中每个特征图的大小是C1中特征图大小的1/4(长宽各缩短1/2)。本层具有激活函数,为sigmod函数,而卷积层没有激活函数。

S2层的可训练参数为:

(1+1)*6=12个可训练参数

S2层的连接数为:(2*2+1)*6*14*14=5880个

卷积层(C3):

C3层由16个10*10的特征图所组成,它同样是由5*5的卷积核去卷积S2所得到,因为使用的卷积核数量为16,所以C3层也就有16个特征图了。C3中每个特征图由S2中所有6个或者几个特征map组合而成。

上面这句话有点难以理解,这里说明一下:

假设 输入图像维度为 n*n*Nc,卷积核维度为 f*f*Nc,卷积核数量为N,那我们在做卷积操作时,一般会将卷积核的每一个通道与输入图像的对应的通道进行卷积操作然后求和,接着再加上偏置以及经过非线性转换得到最终的特征图中的神经单元。

注意:卷积核的通道数与输入图像的通道数一致,也就是说卷积核中的每一个通道会与输入图像的对应通道进行卷积操作。但是在LeNet5神经网络中的C3层中有一点不一样,并不是卷积核的每一个通道会与输入图像的对应通道进行卷积,它只是对其中的几个对应通道进行卷积操作。

卷积神经网络.经典神经网络模型之LeNet-5_第2张图片

上图来源于LeNet5的论文,描述了C3中的卷积核与S2各通道做卷积的关系。

上图左边 0~5表示的是S2的特征图数量为6,也就是在这一层的输入图像的维度为14*14*6,通道数为6,那么做卷积核的通道数也为6

上图上边0~15表示C3的特征图数量,也就是卷积核的数量,因为输出特征图的数量由卷积核的数量来决定

我们以C3中的第0个特征图为例:

在这个特征图中,也就是生成特征图所对应的卷积核其维度为5*5*6, 正常情况下应该是S2(维度14*14*6)中的每一个特征图(即每一个通道)与卷积核对应的每一个通道进行卷积然后求和,但是在这里我们只将S2的前三个特征图(即通道)与卷积核的前三个通道(5*5*3)进行卷积操作然后求和,其他通道直接放弃不做卷积求和操作,就像是只有输入只有三方通道一样。

这里我们可以看到C3中的前6个特征图(输出图像的通道)只与S2中的三个特征图做卷积得到,卷积核大小为5*5*3;后面的6~14个特征图是与S2中的四个特征图做卷积得到,卷积核大小为5*5*4;最后一个特征图15是与S2中的所有特征图做卷积,卷积核为5*5*6。

这样C3层所有的可训练参数为:

(5*5*3+1)*6+(5*5*4+1)*9+(5*5*6+1)*1=1516 个可训练参数

连接数为:

(5x5x3+1)x10x10x6+(5x5x4+1)x10x10x9+(5x5x6+1)x10x10 = 45600+90900+15100=151600

为什么不和一般的卷积一样,将卷积核的所有通道和S2的通道一一对应进行卷积求和呢?

这里有以下原因:

首先可以节省计算量和减少参数数量

破坏网络的对称性,由于不同的特征图有不同的输入,所以迫使他们抽取不同的特征

不完全的连接机制将连接的数量保持在合理的范围内

池化层(Subsampling,S4):

这一层也是平均池化层,同S2一样,本层由16个5*5的特征图组成,卷积核大小为2*2,卷积核数量为16,本层存在激活函数,为sigmod函数。

则该层总共的可训练参数为:

(权重值1个+偏置实数1个)*16个卷积核 = 32个 可训练参数

连接数为:

(2*2+1)*6*5*5 = 2000 个连接数

卷积层(C5):

该层同样是卷积层,有120个特征图,这层特征图中的每一个神经单元与S4层的全部16个单元的5*5邻域相连,也就是说卷积核大小为5*5*16,那么C5层的特征图大小为1*1,这构成了S4和C5之间的全连接。之所以仍将C5标示为卷积层而非全相联层,是因为如果LeNet-5的输入变大,而其他的保持不变,那么此时特征图的维数就会比1*1大。因为每个卷积核只对应一个神经元了,因此本层只有120个神经元并列排列,每个神经元连接池化层的所有层。

C5层的每个神经元的连接数为5x5x16+1,因此总共的连接数为:(5x5x16+1)x120=48120,而这一层的权值和连接数一样,因此也有48120个待训练权值。

卷积神经网络.经典神经网络模型之LeNet-5_第3张图片

全连接层(F6):

该层为全连接层,这一层有84个神经元,与C5层进行全连接。每一个神经元都和上一次的120个神经元相连接,那么连接数为(120+1)x84 = 10164。如同经典神经网络,F6层计算输入向量和权重向量之间的点积,再加上一个偏置。然后将其传递给sigmoid函数产生单元i的一个状态。

输出层(径向基层):

该层有十个神经元,可以理解这是对于手写体10个数,那个输出的数大,那个神经元代表的数字就是输出。

采用的是径向基函数(RBF)的网络连接方式。假设x是上一层的输入,y是RBF的输出,则RBF输出的计算方式是:

网络解析(一):LeNet-5详解

上式w_ij 的值由i的比特图编码确定,i从0到9,j取值从0到7*12-1。RBF输出的值越接近于0,则越接近于i,即越接近于i的ASCII编码图,表示当前网络输入的识别结果是字符i。该层有84x10=840个参数和连接。

网络解析(一):LeNet-5详解

如上就是一个完整的使用LeNet-5 识别数字3的过程

 

这里参考一下大佬的文章,感谢:

网络解析(一):LeNet-5详解

详细解释CNN卷积神经网络各层的参数和链接个数的计算

深度学习 --- 卷积神经网络CNN(LeNet-5网络详解)

你可能感兴趣的:(#,吴恩达CNN学习笔记,LeNet-5)