AlexNet的结构分析过程记录

写总结也是为了帮助自己更好的理解,先是写给自己看,然后才是写给别人看。如果能在分享的过程中对他人有帮助是再好不过的事情,期待能够遇到志同道合的伙伴,但不强求。

为什么写这篇文章?

在看完论文《ImageNet Classification with Deep Convolutional Neural Networks》之后,似懂非懂,想起向老师说过,看一些经典的论文时,一定要去考虑复现,只有复现了以后才能帮助你更好的理解,所以考虑去复现。但是在复现的过程中发现,论文中给的线索很少,也没有找到官方的开源代码。所以就开始在网上找各位大佬们的论文分析。在看各位大佬分析过程中发现,好像大家都是理所当然的知道结构就是这样的,并没有解释为什么是这样。所以只得再次把看过的论文拿出来重新开始看。

在再次看论文的过程中,我用黄色划线标注重要的论文细节,用蓝色划线标注论文的写作手法,用红色加粗字体标注需要再次确认翻译的地方。并将论文中需要重点关注的内容列在了论文的中文翻译下面。之后将重点关注的内容进行重点关注,不懂得地方进行百度,一切以搞懂论文中的网络结构为终极目的。

最后,有了这一篇文章。

一、分析步骤

1.由论文可以得到的已知线索

线索1.这个神经网络有6000万参数和650000个神经元,包含5个卷积层(某些卷积层后面带有池化层)和3个全连接层,最后是一个1000维的softmax。

线索2.ImageNet包含各种分辨率的图像,而我们的系统要求不变的输入维度。因此,我们将图像进行下采样到固定的256×256分辨率。

线索3.网络的输入是150528维,网络剩下层的神经元数目分别是253440,186624,64896,64896,43264,4096,4096,1000(8层)。

线索4.池化层可看作由池化单元网格组成,网格间距为s个像素,每个网格归纳池化单元中心位置z×z大小的邻居。如果设置s=z,我们会得到通常在CNN中采用的传统局部池化。如果设置s<z,我们会得到重叠池化。这就是我们网络中使用的方法,设置s=2,z=3。

线索5.第1卷积层使用96个核对224 × 224 × 3的输入图像进行滤波,核大小为11 × 11 × 3,步长是4个像素(核映射中相邻神经元感受野中心之间的距离)。第2卷积层使用用第1个卷积层的输出(响应归一化和池化)作为输入,并使用256个核进行滤波,核大小为5 × 5 × 48。第3,4,5卷积层互相连接,中间没有接入池化层或归一化层。第3卷积层有384个核,核大小为3 × 3 × 256,与第2卷积层的输出(归一化的,池化的)相连。第4卷积层有384个核,核大小为3 × 3 × 192,第5卷积层有256个核,核大小为3 × 3 × 192。每个全连接层有4096个神经元。

结构图如下:
在这里插入图片描述
论文的结构分析中还有写使用ReLu非线性函数,多GPU训练和局部响应归一化等技术,这些是AlexNet在2012年ILSVRC分类任务比赛的冠军的一些在当时很新奇的特性,但是与我们的结构分析关系不大,故这里不做过多分析。

2.对已有线索进行分析与简化

线索1可以简化为:

​ 6000万参数和650000个神经元

​ 5个卷积层(某些卷积层后面带有池化层)和3个全连接层【这里需要注意,因为论文的作者关注的是有权重的层,所以并没有对池化层等进行同等重要的表达】

线索2可以简化为:

​ 处理后图像的分辨率为256×256

线索3的分析为:

​ 网络的输入是150528(224*224*3)维,网络剩下层的神经元数目分别是253440(近似为55*55*96=290400),186624(224*224*256),64896(13*13*384),64896(13*13*384),43264(13*13*256),4096,4096,1000

​ 为什么得到这些分解的乘数因子,一开始是结合AlexNet中的架构图碰巧试出来了后面4层卷积层的输入,但是总是得不到253440是怎么来的,后面又用我试出来的这些“13*13*256“去查相关的AlexNet的分析博客,看到了一些大佬的分析,最后得到了上面的内容。这部分内容的得到,对于后面理解整个结构图很重要。

线索4可以简化为:

​ 池化方式为重叠池化,大小为3× 3,步长为2

线索5的分析为:

​ 包含权重的八个层中,

​ 第1卷积层: 输入:224 × 224 × 3,卷积核96个11× 11× 3,步长4

​ 第2卷积层: 输入:第1个卷积层的输出(响应归一化和池化),卷积核256个5× 5× 48

​ 第3卷积层: 输入:第2卷积层的输出(归一化和池化后),卷积核384个3 × 3 × 256

​ 第4卷积层: 输入:第三层卷积层的输出,卷积核384个3 × 3 × 192

​ 第5卷积层: 输入:第四层卷积层的输出,卷积核256个3 × 3 × 192

​ 全连接层1: 4096个神经元

​ 全连接层2: 4096个神经元

​ 全连接层3: 1000个神经元

3.根据已有线索进行补充

3.1 卷积和池化后图片尺寸变化公式:
N = ( W − F + 2 P ) / S + 1 N=(W-F+2P)/S+1 N=(WF+2P)/S+1
(其中w为图片的原始尺寸,w为卷积核大小,P为padding的像素)

3.2 每一层卷积层的神经元数目

论文中提到五个卷积层神经元数目分别是253440(近似为55*55*96=290400),186624(224*224*256),64896(13*13*384),64896(13*13*384),43264(13*13*256),每一层中乘数因子n*n表示的是经过卷积层的输出后图片的尺寸。(这里解释的有点牵强,我的理解是由于池化层中不带有权重和偏置,没有算池化层中的神经元个数,不知道理解对不对)

4.补充过程

4.1根据卷积和池化后图片尺寸变化公式计算第一层卷积层中尺寸的变化过程其中计算过程为:55=(227-11)/4+1;27=(55-3)/2+1
在这里插入图片描述
4.2根据神经元数量补充每一次卷积层的输出尺寸
在这里插入图片描述
4.3根据池化后尺寸变化公式,计算池化后图片尺寸,同时补充第四、五层的输入尺寸
在这里插入图片描述
4.4根据图片的输入和输出推出第二、三、四、五层卷积层的步长和是否padding
在这里插入图片描述

二、重要的论文细节

1.2048个因子(出自数据增强4.1第二段)

【The first form of data augmentation consists of generating image translations and horizontal reflec-
tions. We do this by extracting random 224× 224 patches (and their horizontal reflections) from the
256× 256 images and training our network on these extracted patches. This increases the size of our
training set by a factor of 2048, though the resulting training examples are, of course, highly inter-
dependent. 】

即将训练集增大到原来的2048倍。256×256图像上通过随机提取224 × 224的图像块(同时进行水平翻转),变换后图像和原图像相差了32个像素,再加上水平翻转,计算方式为32× 32× 2.

2.神经元个数65万(出自摘要)

【The neural network, which has 60 million parameters and 650,000 neurons】

253440+186624+64896×2+43264+4096×2+1000=622312

3.参数个数6000万(出自摘要)

【The neural network, which has 60 million parameters and 650,000 neurons】

第一层卷积层:(11x11x3)x96+96=3,4944

第二层卷积层:(5x5x96)x256+256=61,4656

第三层卷积层:(3x3x256)x384+384=88,5120

第四层卷积层:(3x3x384)x384+384=132,7488

第五层卷积层:(3x3x384)x256+256=88,4992

全连接层1:(6x6x256)x4096+4096=3775,2832

全连接层2:4096x4096+4096=1678,1312

全连接层3:4096x1000+1000=409,7000

总数为:3,4944+61,4656+88,5120+132,7488+88,4992+3775,2832+1678,1312+409,7000=6237,8344

卷积层中计算公式为:权重数+偏置数=卷积和尺寸*卷积核个数+卷积核个数

全连接中计算公式为:权重数+偏置数=输入尺寸*神经元数量+当前层神经元数量

关于卷积层中偏重数目的计算可以看下图多通道多卷积核的卷积操作参考图,帮助理解:
在这里插入图片描述在这里插入图片描述

三、参考资料

1.AlexNet详细解读:https://blog.csdn.net/qq_24695385/article/details/80368618

2.CNN中的参数解释及计算:https://flat2010.github.io/2018/06/15/%E6%89%8B%E7%AE%97CNN%E4%B8%AD%E7%9A%84%E5%8F%82%E6%95%B0/#undefined

3.AlexNet原理及Tensorflow实现:https://blog.csdn.net/taoyanqi8932/article/details/71081390

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值