深度学习理论篇之 ( 十四) -- AlexNet之更上一楼

2022-06-01 19:54:01 浏览数 (2)

科普知识

损失函数(loss function)或代价函数(cost function)是将随机事件或其有关随机变量的取值映射为非负实数以表示该随机事件的“风险”或“损失”的函数。在应用中,损失函数通常作为学习准则与优化问题相联系,即通过最小化损失函数求解和评估模型。

# 前言 #

上一期文章中,我们学习了LetNet-5的理论篇文章,详细分析了该网络的每一层结构和维度信息,然后在实战篇中进行代码实战,通过学习和实战,我们发现LetNet-5的网络结构似乎有点简单,第一,网络层数较少,第二,每一层网络的通道信息较少,换句话说就是每一层输出的通道数量较少。这样的网络对于更加复杂的视觉任务可能不太够用。我们通常认为越深的网络结构能够学习到更加深层次的信息,而越多的通道数量能够丰富特征的表示。今天我们就来学习比LetNet-5稍微复杂一点的网络。

一、AlexNet

本期文章我们分享AlexNet网络,原始论文的名称为:ImageNet Classification with Deep Convolutional Neural Networks,翻译过来就是基于深度卷积神经网络的ImageNet图像分类,ImageNet为一个大型图像数据集,通常采用的类别数为1000个类,包含了我们生活中常见的各种物体,因此每年这个数据集的发布者也会举办大型的赛事,最近两年似乎没有进行啦,不过,最新的论文还在不断刷新之前的图像分类准确率和错误率。

论文截图:

论文地址:

https://proceedings.neurips.cc/paper/2012/file/c399862d3b9d6b76c8436e924a68c45b-Paper.pdf

网络结构图:

仔细观察原始论文的网络结构图,第一眼是不是有种没看懂的感觉,这是因为他是并行的,其实可以合并为一个串联的网络结构呢,那么为什么要并行呢?如果你用心就会发现每一层的通道数(48,128,192,128,1024,这其实只是单个分支,本质是前面的每个通道数的两倍)都越来越大,这样多的神经元所消耗的计算资源是非常大的,所以作者采用了两个GPU训练,然后将结果合并在了一起作为输出。由于现在的显卡已经可以支持这样的训练要求了,因此,后期,我们实战的时候会把两个分支合并在一起进行最终的训练。

网络结构解析:

1.输入层:一张图像,其shape为3*227*227,代表是彩色图(三通道),图像大小为227*227,当然,原始图像不一定为227,应该是输入之前经过一个resize操作将224变为227的.

2.卷积层1:

输入:3*227*227

卷积核大小:11*11

卷积核个数:96(两个分支之和,48 48)

步长:4

输出特征图大小:(227-11)/4 1 =55,即 55*55

输出特征图shape:96*55*55代表96个55*55的特征图,96可理解为55*55大小的特征图有96个通道。

3.最大池化层1:

输入:96*55*55

池化核大小:3*3

池化核个数:96

步长:2

输出特征图大小:(55-3)/2 1 =27,即 27*27

输出特征图shape: 96*27*27

4.卷积层2:

输入:96*27*27

卷积核大小:5*5

卷积核个数:256

步长:默认为1

padding: SAME

输出特征图大小:27 2*2-5 1 =27 ,即 27*27

输出特征图shape:256*27*27 代表256个27*27的特征图,256可理解为27*27大小的特征图有256个通道。

5.最大池化层2:

输入:256*27*27

池化核大小:3*3

池化核个数:256

步长:2

输出特征图大小:(27-3)/2 1 =13,即 13*13

输出特征图shape:256*13*13

6.卷积层3:

输入:256*13*13

卷积核大小:3*3

卷积核个数:384

步长:默认为1

padding:SAME

输出特征图大小:由于padding为SAME,保持与原始特征图一样的大小:13*13

输出特征图shape:384*13*13 代表384个13*13的特征图.

7.卷积层4:

输入:384*13*13

卷积核大小:3*3

卷积核个数:384

步长:默认为1

padding:SAME

输出特征图大小:由于padding为SAME,保持与原始特征图一样的大小:13*13

输出特征图shape:384*13*13 代表384个13*13的特征图.

8.最大池化层3:

输入:256*13*13

池化核大小:3*3

池化核个数:256

步长:2

输出特征图大小:(13-3)/2 1 =6,即 6*6

输出特征图shape:256*6*6

9.全连接层1:

输入:256*6*6

输出神经元:4096

输出shape:4096

10.全连接层2:

输入:4096

输出神经元:4096

输出shape:4096

11.全连接层3:

输入:4096

输出神经元:1000(代表分类数目)

输出shape:1000

以上就是整个网络的流程了,网络的最后输出为1000个神经元,对应1000个类别。

结语

本周的分享到此结束啦,网络没有很复杂,需要注意的是其中的最后三个卷积层由于采用了填充操作(padding:SAME),因此输出特征图与输入的shape一致,其他的都与之前的LetNet-5的结构类似。老铁们,先去仔细熟悉一遍图像shape变化的流程和网络结构的顺序,下次分享我们会进行代码实践,尽请期待,有问题,记得随时后台哦。

周末愉快!

编辑:玥怡居士|审核:小圈圈居士

0 人点赞