卷积层改变维度,梯度卷积核
1、卷积网络实例分析
卷积网络的构造如下:
from tensor flow . python . kerasimport datasets,models,layers class CNN(object):def _ _ init _ _(self):model=models . sequential()#第一层卷积,卷积核大小为3*3,32个卷积核,28*28为待训练图片的大小model.add (layers.conv2d (32,(3,3),activation= relu ,input _ shape=(28,28,1))# pool Layer . add(layers . max pooling 2d(2 2 2)#第二层卷积,卷积核大小3)、activation= relu )# pooled Layer model . add(layers . max pooling 2d(2,2)) # Layer 3卷积28卷积核model.add (layers.conv2d (128,(3,3),activation= relu )# pool Layer model . add(layers . max pooling 2d(2,2) # model.add(layers)。 Flatten()) # layer 4全连接层,64个神经元model.add(层。dense (64,activation= relu )#第5层全连接第10层神经元,Soft多用于分类model.add (layers.dense (10,activation= Soft max ))model . summary()self . model=model if _ _ name _= _ _ main _ :CNN()输出的网络信息如下:
1.卷积层参数数的计算方法:(卷积核高度*卷积核宽度*通道数1) *卷积核数
2.当前全连接层参数个数的计算方法:(上一层神经元个数为1) *当前层神经元个数。
上面的1代表偏倚,因为每个神经元都有偏倚。
卷积层1: 320=(3 * 3 * 1 1) * 32
卷积层2: 18496=(3 * 3 * 321) * 64
卷积层3: 73856=(3 * 3 * 64 1) * 128
全连接层1:8256=(128 ^ 1)* 64
连接层2:650=(64 ^ 1)* 10
2、各层参数和链接数计算
举例:
下面以最经典的LeNet-5为例,逐层分析各层的参数和连接数。
图2
C1层(卷积层):
是一个卷积层,由六个特征图组成。特征图中的每个神经元连接到一个5*5的邻域(过滤器)。
1. 特征图大小:
特性图尺寸为28*28,可以防止输入连接掉出边界(32-5 1=28)。 地物图边长的具体计算见http://blog.csdn.net/qq_15192373/article/details/78393520。
2. 参数个数:
c1有156个可训练参数(5*5=25个单位参数和每个滤波器的一个偏置参数,总共6个滤波器,总共(5*5 1)*6=156个参数)
3. 链接个数/FLOPS个数::
(5 * 5 1) * 6 * (28 * 28)=122,304.左边是滤波器在输入层中滑动通过的神经元数量,右边是C1层中每个特征图的神经元数量。左右的对应关系是1对28*28,连接个数相乘。(每个环节对应一个计算。从wa b可知,每个参数参与一次计算,所以一个单位的偏移量B也算。) -
S2层(下采样层):
是降采样图层,有6张14*14的特征图。特征图中的每个单元连接到C1中相应特征图的2*2邻域。
1. 特征图大小:
每个细胞的2*2感受野不重叠,所以S2每个特征图的大小是C1的1/4(每行和列各1/2)。 在
2. 参数个数:
s2层中有12(6 *(1 ^ 1)=12)个可训练参数。层S2的每个滤波器经过的四个邻域的四个输入被加在一起,乘以可训练参数W,加上可训练偏差B(即,一个滤波器对应于两个参数)。(对于亚采样层,每个特征图的可变参数需要考虑你使用的采样方法。比如本文的采样方法,每个特征图的可变参数个数为2,有些采样方法不需要参数。)
3. 链接个数/FLOPS个数:
5880个连接,((2 * 2 ^ 1)* 6 * 14 * 14=5880)。左边是C1层中滤波器滑过的神经元数量,右边是S2层中每个特征图的神经元数量。乘法就是连接数。 -
C3层(卷积层)
:是卷积层。它还通过55卷积核对卷积层S2进行去卷积,然后得到的特征图只有1010个神经元,但是它有16个不同的卷积核,所以有16个特征图。
1. 特征图大小:
c3中的每个特征图都是由S2中的全部六个或几个特征图组合而成(将几个滤波器计算出的神经元的值相加,合并成一个神经元)。
为什么不把S2的每个特征图和C3的每个特征图连接起来?原因有二。
第一,不完全连接机制将连接数保持在合理的范围内。
其次,也是最重要的,它破坏了网络的对称性。因为不同的特征图有不同的输入,所以被迫提取不同的特征(希望是互补的)。(14-5 1=10)
2. 参数个数:
例如,一种存在方式是:
C3的前六个特征图:相当于六组滤波器,每组以S2的三个相邻特征图子集为输入,共享一个偏倚。(C3的每张特征地图都是用不同的滤镜将S2的三张特征地图相加得到的)
C3的下六个特征图:相当于六组滤波器,每组以S2的四个相邻特征图子集为输入,共用一个偏倚。(1至4)
C3的下三个特征图:相当于需要三组滤波器,每组以S2的四个不相邻的特征图子集作为输入,共用一个偏倚。(1至4)
C3最后的特征图:相当于需要一套滤波器,每套以S2所有的特征图为输入,共用一个偏置。(1至6)
这个C3层有1516个可训练参数。计算:6 *(3 * 25 1)6 *(4 * 25 1)3 *(4 * 25 1)(25 * 6 1)=1516。在这里,C3特征图是通过在S2组合N个卷积结果,然后共享一个B,并组合和计算得到的。
3.链接个数/FLOPS个数:
1516 * 10 * 10=151600个连接。左边是滤波器滑过的S2层神经元数量,右边是C3层特征图的大小。
-
S4层(下采样层)
:是下采样图层,由16张5*5的特征图组成。特征图中的每个单元都连接到C3相应特征图的2*2邻域,就像C1和S2之间的连接一样。
1. 特征图大小:
5 * 5尺寸。每个细胞的2*2感受野不重叠,所以S2的每个特征图的大小是C1的1/4(每行和列的1/2)。
2. 参数个数:
S4层有32个可训练参数。(每个特性图1个因子w和1个偏移b,16 *(1 ^ 1)=32)
3.
链接个数/FLOPS个数:
16 *(2 * 2 ^ 1)* 5 * 5=2000个连接。左边是滤波器滑过C3层的神经元数量,右边是S4层的神经元数量。乘法就是连接数。
-
C5层(卷积层或第一个全连接层):
是一个卷积层,有120个特征图(或神经元)。每个像元都连接到S4图层中所有16个像元的5*5邻域(与S4图层的特征地图一样大)。(120组滤波器,每组16个滤波器,分别与16个S4层特征图进行卷积,每组得到一个C5层神经元/特征图)
1. 特征图大小:
由于S4层的特征图也是5*5(与滤镜相同),所以C5的特征图是1*1。(5-5 1=1),这构成了S4和C5之间的完全连接。之所以C5仍然标记为卷积层而不是全相关层,是因为如果LeNet-5的输入变大,而其他保持不变,那么特征图的维数就会大于1*1。
2. 参数个数:
120 * (16 * 5 * 5 1)=48120.滤镜数量是120*16,所以W有120*16*5*5,同一组的16个滤镜共用一个B,所以有120个B。
3.
链接个数/FLOPS个数:
48120 * 1*1,左边是滤波器滑动的神经元个数,右边是C5特征图的大小(其实现在已经变成单个神经元了,大小为1*1)。乘法是连接数,这里是翻牌数。
-
虽然F6层(全连接层):
是全连通层,但是F6层的每个神经元通过每组120个1*1滤波器与C5层卷积,总共有84组滤波器,结果是84个神经元。
1. 特征图大小:
有84个单元(选择这个数字的原因来自于输出层的设计),都与C5层相连。
2. 参数个数:
有84* (120*(1*1) 1)=10164个可训练参数。像经典的神经网络一样,F6层计算输入向量(120)和权重向量(1*1)之间的点积,加上偏移量(1)。然后将其传递到sigmoid函数生成单元I的状态.
3.
链接个数/FLOPS个数:
10164 * 1 * 1,左边是滤波器在C5层滑过的神经元个数,右边是F6层特征图的大小。1个链接对应1个计算。
-
输出层:
由欧几里德径向基函数单元组成,每种类型一个,每个单元有84个输入。
-
3、卷积和下采样说明
图3卷积和二次采样过程
卷积过程包括:
用可训练滤波器fx对一幅输入图像进行卷积(第一级是输入图像,后期是卷积后的特征图),然后加上偏移量bx,得到卷积后的图层Cx。
子采样过程包括:
每个邻域四个像素之和变成一个像素,然后用标量Wx 1加权,再增加偏移量bx 1。然后,使用sigmoid激活函数来生成缩小了大约四倍的特征图Sx 1。