01
LeNet5介绍
论文:《Gradient-Based Learning Applied to Document Recognition》
大名鼎鼎的LeNet5诞生于1994年,是最早的深层的卷积神经网络之一,并且推动了深度学习的发展。从1988年开始,再多次成功的迭代后,这项有Yann LeCun完成的开拓性成果被命名为LeNet5。LeCun认为,可训练参数的卷积层是一种用少量参数在图像的多个位置上提取相似特征的有效方式,这和直接把每个像素作为多层神经网络的输入不同。像素不应该被使用在输入层,因为图像具有很强的空间相关性,而使用图像中独立的像素直接作为输入则利用不到这些特性。LeNet5当时的特性有如下几点:
(1)每个卷积层包含三个部分:卷积、池化和非线性激活函数
(2)使用卷积提取空间特征
(3)降采样(subsample)的平均池化层(average pooling)
(4)双曲正切(tanh)或S型(sigmoid)的激活函数
(5)MLP作为最后的分类器
(6)层与层之间的稀疏连接减少计算复杂度
02
LeNet5结构
LeNet-5,一个7层的卷积神经网络,输入图像为32*32大小。这要比Mnist数据库(一个公认的手写数据库)中最大的字母还大(28*28)。
我们来理解一下这种模型的结构。除了输入层,这个模型有七层。由于结构十分的迷你,我们逐层来研究这个模型:
第一层(C1):个卷积层,总共6个卷积核,核尺寸5*5,步长1*1。所以,当输入图像尺寸为32*32*1时,输出尺寸为28*28*6。这层的参数个数为156=5*5*6+6(偏置项的个数)
第二层(S1):池化层,总共6个池化核,核尺寸为2*2,步长为2*2。但是这里的池化层与先前见到的有些许不同。这里的池化层,将接收到的输入值求和后,乘一个训练得到的参数(每个核一个),得到的结果再加一个训练得到的偏置项(同样每个核一个)。最后,将得到的结果通过Sigmod激活函数的映射,得到输出。因此,从前级继承的输入尺寸28*28*6经过了这层,会得到14*14*6的子采样。这层的参数个数为[1(训练得到的参数)+1(训练得到的偏置项)]×6=12
第三层(C3):类似的,本层是和第一层有相同组态的卷积层,唯一不同的是,本层有16个卷积核而不是6个,所以,从前级继承的输入尺寸14*14*6经过了这层,输出层为10*10*16。参数个数为5*5*16+16=416
第四层(S4):同样地,与第二层类似,这次的池化层中有16个核。请牢记,输出同样经过sigmod激活函数。从前级继承的输入尺寸10*10*16经过了这层池化层,会得到5*5*16的子采样.参数个数为(1+1)*16=32
第五层(C5):这次的卷积层使用的是120个5*5的卷积核。由于输入尺寸恰好是5*5*16,所以我们甚至都不用考虑步长就可以得到输出尺寸为1*1*120.本层共有5*5*120=3000个参数
第六层(F6):这是一个有84个参数的全连接层。所以,输入的120个单元会转化成84个单元。因此,共有84*120+84=10164个参数。这里使用了不止一个激活函数。可以确定的是,只要能让问题变得简单,你可以使用你想用的任意的备选激活函数
输出层:最终的一层是一个10单元的全连接层,共有84*10+10=924个参数
03
代码
TensorFlow:
Keras:
Pytorch:
暗中观察
默默关注
领取专属 10元无门槛券
私享最新 技术干货