[关闭]
@pearl3344 2018-08-24T04:25:44.000000Z 字数 5721 阅读 1204

卷积网络,AlexNet

神经网络

自己没有真正使用过卷积网络,卷积层conv 边界填充padding 池化pooling 看了又忘 总是迷迷糊糊, 终于自己整理一个属于自己的理解记录~~ 并详细分析了深度卷积网络AlexNet各层结构。


1.1 卷积操作

两个函数的卷积得到第三个函数:


二维卷积

可以看作是经过滑动加权平均的结果。在二维图像中,对大小的图片片段,将经过大小的卷积核,得到一个像素点
可以把看作是从该图片片段提取的一个特征。

1.2 卷积层

在卷积网络中,多通道的输入图片或者多个特征图进过多个卷积核,可以得到指定多个不同大小的新的特征图。

RGB图片是R,G,B三个通道的二维图片,其尺寸记作w*h*3。对图片可以进行多次独立的特征提取,得到m个特征图,可以看成一个图的m个通道,其尺寸记作w*h*m。

一般不直接对整个输入图片做卷积,而是采用比输入图片小的卷积核,比如大小为,每次取输入图片上大小的局部图片片段,经过卷积核,得到输出特征图上的一个特征点;滑动地在输入图上取图片片段,得到一张输出特征图。
二维卷积,步长为1
如上图所示,输入图片为5x5大小二维图片,卷积核为3x3,每次从输入图片提取3x3的图片块进行计算,最后得到3x3的卷积特征。

对于多通道的输入,每个通道对应一个二维卷积核。故对输入为w*h*m大小的图,卷积核的大小为x*y*m。所有通道的输入图片片段分别与各通道对应的卷积核执行二维卷积后,再将多个通道卷积的结果相加,得到一个输出特征图。

使用多个卷积核,分别对输入图片进行处理,就可以学习到多种特征,得到多个特征图的输出。卷积核的个数决定了输出特征图的个数(也即输出图的通道数)。

综合上面所述,多通道的输入图片尺寸w*h*m,经过多卷积核尺寸x*y*m* n,得到多通道输出图尺寸为 (w-x+1)*(h-y+1)*n。其中 x*y*m* n的卷积核为要学习的参数。

步长stride

在上图的例子中,下一次取到的图片块是在上一次取的图片块移动一个像素,即窗口在宽度和高度方向的滑动的步长stride均为1。也可以按照[a,b]的步长移动,得到更少的特征点。输入图片宽w,每次取x宽度的图片块,每次取后后移a个位置,则可以取次,故输出的特征图的宽度为
一维卷积的有效输出维度

边界填充padding

经过卷积核后,得到的特征图的大小与输入图的大小不再一样。而且当步长a不为1时,可能经过对输入图片的多次取图片块后,剩下的图片经过步长a的位移后,不够卷积核的大小,导致这部分剩下的图片信息不能被利用而丢失。具体地来说,当不是整数的时候,会有图片块被丢失。如上个图片所示,当宽w=8, 卷积核宽x=3, 宽度方向步长a=2,则原图的最后一列始终不会被使用。

边界处理及padding技巧考虑上述问题。
考虑两种边界模式:

实例: 多通道, padding

动态图示例 展示了三通道的输入,两通道的输出的一些位置上的卷积操作。

更多动态示例 :
http://blog.csdn.net/chaipp0607/article/details/72847422
http://blog.csdn.net/real_myth/article/details/51824193

1.3 池化层pooling

如果经过卷积后的特征图太大,考虑进一步对特征图划分方块,对一个方块内的特征做聚合统计,得到平均值或者最大值,作为该方块的聚合特征。这个过程叫池化,可以起到特征融合和降维的作用。

与卷积核对输入图的作用类似,大小为p*q的池化核在大小为w'*h'的特征图上滑动,步长[u,v],对应位置的大小p*q的特征块经过聚合得到一个聚合特征图的特征点。与卷积核包括需要学习的卷积参数不同,特征聚合的方法一般为 简单的取平均值或者取最大值,并不存在池化核参数不与其作用。

通常的网络滑动的步长等于(或大于)方块边长,得到没有重合的池化。

池化操作是在各个通道的二维图上进行的,改变的是特征图的宽高,不改变特征图的通道数(个数)。
max池化

池化后的特征图经过激活函数(ReLU, tanh,sigmoid, ...),得到下一层的输入。


LeNet5

1x28x28=784
卷积层 1x20x5x5
20X24X24
MAX池化层 2x2
20x12x12=2880
卷积层20x50x5x5
50x8x8
max池化层 2x2
50x4x4=800
全连接层800x500
500
全连接层500x10
10


AlexNet

为ImageNet图片分类而生,训练集包括120万张图片,采用的输入图片的大小为256x256。5个卷积层+3个全连接层,在两个GPU上运算,在某一些层上两个GPU进行通信。第3层和全连接层 将 上一层的2个GPU上的通道一起作为输入,其它层单个GPU只输入对应GPU上的图片通道。前两个卷积层和最后一个卷积层之后,有正规化和池化。采用的有重合的池化,步长2,池化窗口3。
AlexNet网络结构

__ _ _ L0 _ __ _ __ L1 _ _ __ _ _L2

各层尺寸分析

AlexNet总结


VGG-D

13个卷积层,3个全连接层。
卷积核大小全部是3x3,步长1,边界same,填充2个零,经过卷积层后图片宽高不变。
5个最大池化层,池化窗口大小2x2,步长2,经过池化层后图片宽高减半。

各层特征图大小:
输入L ImageNet图像
0: 224*224*3
1. 224*224*64
2. 224*224*64
池化后(224-2+1)/2= 111.5=112
3. 112*112*128
4. 112*112*128
池化后(112-2+1)/2= 55.5=56
5. 56*56*256
6. 56*56*256
7. 56*56*256
池化后(56-2+1)/2= 27.5=28
8. 28*28*512
9. 28*28*512
10. 28*28*512
池化后(28-2+1)/2= 13.5=14
11. 14*14*512
12. 14*14*512
13. 14*14*512
池化后(14-2+1)/2= 6.5=7
view as向量作为全连接输入 7*7*512=25088
14. 4096 第14个权重的输出节点个数
15. 4096
16. 1000

16个权重参数,
参数个数138million=1.38亿,其中卷积层 参数个数0.145亿,占10.6%。
3*3*3*64 +3*3*64*64 +3*3*64*128 +3*3*128*128 +3*3*128*256=554 688
+3*3*256*256 +3*3*256*256 +3*3*256*512 +3*3*512*512 +3*3*512*512=7 077 888
+3*3*512*512 +3*3*512*512 +3*3*512*512 = 7 077 888
554688+7077888+7077888=14710464 个=0.145 亿,10.6%

全连接层 参数个数1.236亿, 占89.3%
7*7*512*4096+4096*4096+4096*1000= 123633664=1.236亿

总共14710464+ 123633664= 138344128=138million=1.38亿


VGG-Cifar10InTorch

13个卷积层,2个全连接层。
卷积核大小全部是3x3,步长1,边界same,填充2个零,经过卷积层后图片宽高不变。
5个最大池化层,池化窗口大小2x2,步长2,经过池化层后图片宽高减半。

各层特征图大小:
输入L cifar图片
0: 32*32*3
1. 32*32*64
2. 32*32*64
池化后(32-2+1)/2= 15.5=16
3. 16*16*128
4. 16*16*128
池化后(16-2+1)/2= 7.5=8
5. 8*8*256
6. 8*8*256
7. 8*8*256
池化后(8-2+1)/2= 3.5=4
8. 4*4*512
9. 4*4*512
10. 4*4*512
池化后(4-2+1)/2= 1.5=2
11. 2*2*512
12. 2*2*512
13. 2*2*512
池化后(2-2+1)/2= 0.5=1
1*1*512=512
14. 512 第14个权重的输出节点个数
15. 10

15个权重参数的个数
13个卷积核3*64*9+64*64*9+64*128*9+128*128*9+128*256*9+256*256*9+256*256*9+256*512*9+512*512*9+512*512*9+512*512*9+512*512*9+512*512*9=14710464
2个全连接矩阵512*512+512*10=267264
14710464+267264=14977728
主要是卷积参数。



GoogleNet

GoogleNet结构信息图

2.7+112+159+380+364+437+463+580+840+1072+1388+1000=6797.7K


添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注