(九) 深度学习笔记 | AlexNet网络结构详解

一、前言

AlexNet是2012年ISLVRC 2012(ImageNet Large Scale Visual Recognition Challenge)竞赛的冠军网络,分类准确率由传统的70%+提升到80%+。
它是由Hinton和他的学生 Alex Krizheveky设计的。也就是在那年后,深度学习开始迅速发展。

二、 AlexNet网络优点

  1. 首次使用GPU进行网络加速训练
  2. 使用了ReLU激活函数,而不是传统的Sigmoid激活函数以及Tanh激活函数
  3. 使用了LRN局部响应归一化
  4. 在全连接层的前两层中使用了Dropout随机失活神经元操作,以减少过拟合

2.1过拟合

过拟合:根本原因是特征维度过多,模型假设过于复杂,参数过多,训练数据过少,噪声过多,导致拟合的函数完美的预测训练集,但对新数据的测试集预测结果差。
过度的拟合了训练数据,而没有考虑到泛化能力。
(九) 深度学习笔记 | AlexNet网络结构详解_第1张图片

三、对Alextnet网络结构图思考

这里的网络和LeNet -5-网络有些许不同,在LeNet-5网络里,卷积层和池化层是分开的即一层卷积层一层池化这样分布的,但是深度卷积神经网络和LeNet -5-网络不同,主要不同在卷积和池化层合为一体了,而且还是分两路设计网络。

3.1对图进行思考

3.1.1输入

输入的图片的像素是224x224的且有三层,这三层代表三原色RGB(我们知道所谓的彩色其实就是三原色组合而成的,因此彩色图片也是这样),我们可以简单的看做有三张图片堆叠而成的彩色图片,这三张图片分别对应红色,绿色,蓝色,在LeNet -5-网络只有一层,因为颜色是灰度的。输入层的采样窗口为11×11且也有三层对应图片的三层,那么每采样一次有多少个连接呢?有11x11x3 = 363个,采样窗口的平移步长是4,(在LeNet -5-网络移动步长是1,这里是4,应该很容易理解)为什么步长是4而不是1呢?因为考虑到计算量的问题,如果是1步计算量太大。那么这样的采样窗口在图像上采样后的维度是多少呢?

3.1.2MAX pooling层

通过11×11的采样和卷积的窗口对224x224的图片进行采样得到55x55的层级地图,那厚度是48的什么意思呢?其实就是对应LeNet -5-网络不同的卷积特征平面,如C1有6个特征平面。因此这里的有48 + 48 = 96个55x55的特征平面,为什么是48 + 48,因为这里计算是通过GPU并行计算的,因此采用两路,合并起来就是LeNet -5-网络的那种形式,这里大家需要结合LeNet -5-网络进行理解。

(九) 深度学习笔记 | AlexNet网络结构详解_第2张图片
个人认为下面的图更能对此进行更好的理解:
从下面的图我们可以清楚的看到Alexnet的整个网络结构是由5个卷积层和3个全连接层组成的,深度总共8层
(九) 深度学习笔记 | AlexNet网络结构详解_第3张图片

四、对Alextnet网络结构图理解

4.1卷积后的矩阵尺寸计算公式

这边再次提及一下关于经卷积后的矩阵尺寸大小的计算公式为:
(九) 深度学习笔记 | AlexNet网络结构详解_第4张图片

4.2对层进行理解

4.2.1卷积层1

Conv1: kernels:48*2=96;kernel_size:11;padding:[1, 2] ;stride:4
# 1.其中kernels代表卷积核的个数
# 2.kernel_size代表卷积的尺寸
# 3.padding代表特征矩阵上下左右补零的参数
# 4.stride代表步距

1.输入Input的图像规格:227X227X3

2.使用的96个大小规格为11X11X3的过滤器filter,或者称为卷积核(步长为4),进行特征提取,卷积后的数据:
55X55X96 [(227-11)/4+1=55]
(注意,内核的宽度和高度通常是相同的,深度与通道的数量是相同的。)

3.使用relu作为激励函数,来确保特征图的值范围在合理范围之内。
relu1后的数据:55X55X96

4.降采样操作pool1
pool1的核:3X3 步长:2,降采样之后的数据为27X27X96 [(55-3)/2+1=27]
[注意:Alexnet中采用的是最大池化,是为了避免平均池化的模糊化效果,从而保留最显著的特征,并且AlexNet中提出让步长比池化核的尺寸小,这样池化层的输出之间会有重叠和覆盖,提升了特征的丰富性,减少了信息的丢失。]

4.2.2卷积层2

Maxpool1: kernel_size:3;pading: 0;stride:2

1.输入数据 27X27X96

2.conv2中使用256个5X5大小的过滤器filter(步长1)对27X27X96个特征图,进行进一步提取特征,但是处理的方式和conv1不同,过滤器是对96个特征图中的某几个特征图中相应的区域乘以相应的权重,然后加上偏置之后所得到区域进行卷积。经过这样卷积之后,然后在在加上宽度高度两边都填充2像素,会的到一个新的256个特征图.特征图的大小为:
([27+2X2 - 5]/1 +1) = 27 ,也就是会有256个27X27大小的特征图.

3.然后进行relu操作,relu之后的数据27X27X96

4.降采样操作pool2
pool1的核:3X3 步长:2,pool2(池化层)降采样之后的数据为13X13X96 [(27-3)/2+1=13]

4.2.3卷积层3

Conv3: kernels:192*2=384; kernel_size:3; padding: [1, 1]; stride:1

1.没有降采样层
2.得到[13+2X1 -3]/1 +1 = 13 , 384个13X13的新特征图(核3X3,步长为1)

4.2.4卷积层4

Conv4: kernels:192*2=384; kernel_size:3; padding: [1, 1]; stride:1

输入特征矩阵shape:[13, 13, 384], 输出特征矩阵shape: [13, 13, 384]

1.没有降采样层
2.得到[13+2X1 -3]/1 +1 = 13 , 384个13X13的新特征图(核3X3,步长为1)

4.2.5卷积层5

Conv5: kernels:128*2=256; kernel_size:3; padding: [1, 1]; stride:1

1.输出数据为13X13X256的特征图
2.降采样操作pool3**
pool3的核:3X3 步长:2,pool3(池化层)降采样之后的数据为6X6X256 [(13-3)/2+1=6]

4.2.6全连接层1

全连接层,这里使用4096个神经元,对256个大小为6X6特征图,进行一个全连接,也就是将6X6大小的特征图,进行卷积变为一个特征点,然后对于4096个神经元中的一个点。

是由256个特征图中某些个特征图卷积之后得到的特征点乘以相应的权重之后,再加上一个偏置得到,之后再进行一个dropout,也就是随机从4096个节点中丢掉一些节点信息(值清0),然后就得到新的4096个神经元。

(dropout的使用可以减少过度拟合,丢弃并不影响正向和反向传播。)

[注意:在经过交叉验证,隐含节点dropout率等于0.5的时候效果最好,原因是0.5的时候dropout随机生成的网络结构最多。]

4.2.7全连接层2

和fc6类似

4.2.8全连接层3

采用的是1000个神经元,然后对fc7中4096个神经元进行全链接,然后会通过高斯过滤器,得到1000个float型的值,也就是我们所看到的预测的可能性。

参考:
https://blog.csdn.net/weixin_42398658/article/details/84497551

你可能感兴趣的:(深度学习,网络,深度学习,alexnet模型,自然语言处理,pytorch)