龙空技术网

PyTorch(十一)——常用卷积神经网络之LeNet5

爱生活的程序旺 488

前言:

如今大家对“lenet5用于”大概比较重视,小伙伴们都需要了解一些“lenet5用于”的相关内容。那么小编也在网摘上汇集了一些对于“lenet5用于””的相关内容,希望你们能喜欢,你们一起来学习一下吧!

LeNet5简述

LeNet-5由深度学习三巨头之一的Yan LeCun提出,他也被称为卷积神经网络之父。LeNet-5是一种用于手写体字符识别的非常高效的卷积神经网络,可以算是卷积神经网络的开山之作了。

虽然LeNet-5这个网络非常小,但是它是一个非常完整的卷积神经网络,包含了卷积层、pooling层、全连接层。

LeNet-5网络

上图为LeNet-5的网络结构,除去输入层共有7层,每一层都包含可训练参数,并且由多个FeatureMap,每个FeatureMap都有多个神经元,并且通过一种卷积滤波器提取输入的一种特征。

输入层

输入图像的尺寸统一归一化为32x32,这要比MNIST数据集中最大的字母(28x28)还大,这样可以使潜在的明显特征(如笔画断续、角点)能够出现在最高层特征集的中心。需要注意的是,输入层不算在LeNet-5的网络结构中。

C1层-卷积层

这一层使用6个大小为5x5的卷积核对输入图像进行第一次卷积运算,步长为1,得到6个C1特征图(6个大小为28x28的FeatureMap,根据输出矩阵大小计算公式r=(n-f+2p)/s+1可以求得(32-5+2x0)/1+1=28)。由于卷积核大小为5x5,每个核有1个bias,因此共有6x(5x5+1)=156个参数,156x28x28=122304个连接。可以看到,虽然有122304个连接,但只需要学习156个参数,这主要是通过权值共享实现的。

S2层-池化层

这一层也叫做下采样层,第一次卷积之后紧接着就是池化运算,以一个2x2的区域下采样降低网络训练参数及模型的过拟合程度。由于使用2x2的核进行池化,步长为2,因此得到的S2是6个14x14的特征图((28-2+2x0)/2+1=14)。S2层池化层是对C1层中的2x2区域内的像素求和并乘以一个权重系数再加上一个偏置bias,最后将这个结果再做一次映射。此层共有6x(2x2+1)x14x14=5880个连接。

C3层-卷积层

这一层是第二个卷积层,通过对S2的特征图特殊组合计算得到16个10x10的特征图具体计算如下:C3的前6个FeatureMap与S2层相连的3个,FeatureMap相连接,后面6个FeatureMap与S2层相连的4个FeatureMap相连接,后面3个FeatureMap与S2层部分不相连的4个FeatureMap相连接,最后一个FeatureMap与S2层的所有FeatureMap相连。卷积核大小依然为5x5,因此参数个数为:6x(3x5x5+1)+6x(4x5x5+1)+3x(4x5x5+1)+1x(6x5x5+1)=1516,共有1516x10x10=151600个连接。

S4层-池化层

这一层是第二个池化层,仍然使用一个2x2的核进行池化,共16个FeatureMap,对C3层的16个10x10的特征图分别进行以2x2为单位的池化操作得到16个5x5的特征图。连接方式与S2层类似,共有16x(2x2+1)x5x5=2000个连接。

C5层-卷积层

这一层是最后一个卷积层,卷积核大小依然是5x5,由于S4层的16个特征图大小也为5x5,与卷积核的大小相同,因此卷积后形成的特征图大小为1x1。这一层将产生120个卷积结果,且每一个都与S4层的16个特征图相连,因此共有(5x5x16+1)x120=48120个参数以及48120个连接。

F6层-全连接层

这一层是全连接层,负责将C5的120个特征进行分类。F6层共有84个节点,对应于一个7x12的比特图。其中,-1表示白色,1表示黑色,使每个符合的比特图的黑白色对应一个编码。这一层共有(120+1)x84=10164个训练参数以及10164个连接。

Output层-全连接层

这一层是输出层,也是一个全连接层,共有10个节点,分别对应0-9。

LeNet5的PyTorch实现

PyTorch官方教程中有关LeNet5的代码如下:

LeNet5的PyTorch实现

以上代码基本按照LeNet5的网络结构编写,运行结果如下:

LeNet5运行结果

输出的是LeNet5初始化时创建的2个卷积层和3个线性层,当调用前向传播函数forward( )时,会按照LeNet5的网络结构逐层递进,最终输出预测结果。

标签: #lenet5用于