1.LeNet5
论文地址:Gradient-based learning applied to document recognition
-
结构图LeNet5.jpg
LeNet5是首个成功进行多层训练的卷积神经网络,极大推动了深度学习领域的发展,自此开始,各种优化模型不断的提出,网络结构越来越复杂,层数越来越深。
1.1 结构详解
- input层
LeNet5的提出首要的是针对mnist数据集(手写体识别),其图像都是灰色的,即图像的原始深度为1,其输入的图像大小为32x32(实际下载的手写体数据集都是28x28,所以在第一个卷积层的过程中通常要添加padding,pytorch就得指定padding=2,keras中直接padding='same').在keras中指定padding='same'的含义就是程序自动更新padding的数值,使得输出层的维度和输入层的维度一样。 - C1层
C1层是第一个卷积层,由6个5x5x1的卷积核组成参数,这里的5x5x1中1代表的是卷积核的通道数,这个数值由上一层的通道数组成(上一层图片是灰度图片,所以通道数为1)5x5代表的是卷积核的尺寸。最后的输出维度输出维度的计算公式为:
。输出的通道数和卷积核个数相等,即最后的输出维度为28x28x6,其中的6等于6个卷积核。
- S2层
S2是一个池化层,一般用的是最大池化层,池化的目的应该是降采样,缩小图片的尺寸,减少参数的个数。池化核尺寸为(2x2),步长为2,最后输出的尺寸为,池化层输出的计算公式为:
,池化层与卷积层不同的是,在输出通道上面,卷积层最后的输出通道由卷积核个数决定,池化层最后的输出通道与输入通道相等,即池化层不能改变通道数,只能改变输入图像的尺寸,卷积层既可以改变图像的尺寸也可以改变通道数(所以在后续GoogLeNet、ResNet等结构为了减少参数量,都会用一个1x1的卷积核先改变图像的深度)。S2输出的图像尺寸为14x14x6。
- C3层
C3卷积层,其卷积核尺寸为5x5x6,卷积核个数为16个,其输出维度为(14-5)//1+1 = 10 ,输出的通道数为16,最终输出图像的尺寸为10x10x16 。 - S4层
S4为池化层,池化核尺寸为2x2,步长为2,输出的尺寸为 (10-2)//2+1 = 5 ,输出的通道数与输入通道数一样,均为16,最终输出图像的尺寸为5x5x16 。 - C5层
这里我有点歧义,按照他的命名,这里可能是一个卷积层(卷积convolution都是C开头,后面的全连接Full connection是F开头),但是看图片中又像是先Reshape后的一个全连接,因为图片中S4到C5是full connection。这里我理解的是卷积,即卷积核的尺寸为5x5x16,卷积核的个数为120个,最后卷积的结果为1x1x120,然后Reshape一下变成一个一维的(或者说本质上就是一个一维的,但是用3维的在表达) - F6层
全连接层,没什么好说的,就是一个包含84个神经元的隐藏层。 - output层
因为最后的手写数字的类别为10类(0,1,2,...9),最后的输出为10个结果,这里的激活函数一般选用softmax 。最大值所在的索引即为最后的分类结果。
2.AlexNet
论文地址:ImageNet Classification with Deep Convolutional Neural Networks
-
结构图AlexNet
2.1 结构详解
AlexNet由5个卷积层和3个全连接层组成(不包含池化层)。是2012年ImageNet ILSVRC的冠军。在原始的论文中,因为使用了2个GPU进行了计算,所以将整个网络分成了上下两部分,在下文结构的解释中,我们就不单独分开了,就直接合起来进行描述。如果想看分两组讨论的,有一个另外的参考博客:神经网络之AlexNet
- 输入层
因为ImageNet数据集的维度一般都是224x224的彩色图像,所以基本上后面做图像识别的输入层的维度都是224x224x3 。 - 第一个卷积层
第一个卷积层参数如下:卷积核尺寸11x11x3,卷积核个数为96个(上图是上下各48个,但我们就合并起来描述,下面类似)步长为4,padding=2,最后的输出尺寸为其中//表示整除。所以第一个卷积层的参数个数为
,其中最后一个96为偏置,第一个卷积层的输出维度为55x55x96。第一个卷积层后面紧跟着最大池化,池化和尺寸为3x3,步长为2,不padding,最后池化后的结果为27x27x96。
- 第二个卷积层
输入为27x27x96,卷积核尺寸为5x5x96,padding=2卷积核个数为128,输出尺寸为为,最后输出的维度为27x27x128,卷积层的参数为
,后面紧跟的最大池化,其尺寸为3x3,步长为2,不padding,池化后的输出为13x13x128。
- 第三个卷积层
输入为13x13x128,卷积个尺寸为3x3x128,padding=1,卷积核个数为384,输出尺寸为,参数量为
整个输出的维度为13x13x384,后面没有池化层,所以最后的输出就是下一步的输入。
- 第四个卷积层
输入为13x13x384,卷积核尺寸为3x3x384,padding=1,卷积核个数为384,输出尺寸为13x13,参数量为,没有池化层,最后的输出为13x13x384。
- 第五个卷积层
输入为13x13x384,卷积核尺寸为3x3x384,padding=1,卷积核个数为256,输出尺寸为13x13,参数量为,卷积层输出的维度为13x13x256,后面的最大池化层,池化核尺寸为3x3,步长为2,无padding,池化后的输出为6x6x256。
- 第一个全连接层
输入为6x6x256,卷积核尺寸为6x6x256,卷积核个数为4096,由于卷积核与输入层的维度相同,因此卷积后的维度为1x1x4096,所以最后Reshape一下,就看做4096个神经元。 - 第二个全连接层
4096个神经元 - 第三个全连接层(输出层)
1000个神经元,因为好像最后的分类个数是1000类,
所以最后的神经元个数是1000.
AlexNet 引入了激活函数relu,除了最后一层是softmax以外,其他的激活函数都是relu。引入的局部响应归一化在后续的研究中证明并无太大的作用,一般都是用的BN,所以这里不详细研究这个了。
-
参数量AlexNet参数量
从AlexNet的参数量6千多万,也算是开启了网络越来越深,参数越来越多的先河。
3、VGG-16
论文地址:Very Deep Convolutional Networks for Large-Scale Image Recognition
VGG16相比AlexNet的一个改进是采用连续的几个3x3的卷积核代替AlexNet中的较大卷积核(11x11,5x5)。对于给定的感受野(与输出有关的输入图片的局部大小),采用堆积的小卷积核是优于采用大的卷积核,因为多层非线性层可以增加网络深度来保证学习更复杂的模式,而且代价还比较小(参数更少)。简单来说,在VGG中,使用了3个3x3卷积核来代替5x5卷积核,使用了2个3x3卷积核来代替11*11卷积核,这样做的主要目的是在保证具有相同感知野的条件下,提升了网络的深度,在一定程度上提升了神经网络
的效果。
其中16表示由13个卷积层和3个全连接层组成。
-
结构图VGG-16-1VGG-16-2VGG-16-3
结构图1说明了其中卷积层的参数,结构图2说明了每一层的输出层的参数,图三说明了具体的参数过程。
-
最终的参数量VGG-16 参数量
4、GoogLeNet( inception v1)
ResNet
写的太累了,不想写了,有时间再吧后面的两个模型搞详细点。