所在的位置: html >> html介绍 >> AI课堂27CNNPaperLeNe

AI课堂27CNNPaperLeNe

河南白癜风微信交流群 http://www.guanxxg.com/news/roll/1564657.html

LeNet简介

LeNet神经网络由深度学习三巨头之一的YanLeCun提出,他同时也是卷积神经网络(CNN,ConvolutionalNeuralNetworks)之父。年,LeCun把Neocogniron的精华提取出来,再结合BP(BackPropagation)算法,提出了卷积神经网络算法LeNet-5,也是LeNet系列中效果最佳的版本。LeNet主要用来进行手写字符的识别与分类,并在美国的银行中投入了使用。LeNet的实现确立了CNN的结构,现在神经网络基本以此为基础。

LeNet结构

卷积输出特征图尺寸公式,先列出来,后面计算会用到

Out_size=[(nh-kh+ph+sh)/sh]X[(nw-kw+pw+sw)/sw]

LeNet-5结构详情

输入层

32x32的灰度图像,只有一个通道的二维矩阵。

卷积层C1

论文中以C开头的层都是卷积层的原型。

卷积核参数=6个大小为5x5的卷积核,步长为1,无填充;

输出特征图大小=输入图像-卷积核+1=28,即28x28x6;

神经元数量=所有特征图像素数量和=28x28x6=;

可训练参数量=卷积核参数+偏置=(5x5+1)x6=;

连接数=特征图的各像素与其对应的卷积核的各参数之间的连接数=28x28x(5x5+1)x6=,但是由于采用了权值共享的机制,实际只要训练个参数。

池化层S2

论文中以S开头的层都是我们常见的池化层原型,只不过作者采用的是特殊的池化方式。

输入=6张28x28的特征图;

采样区域=2x2,步长为2,采样方式为4个输入相加然后乘以一个可训练参数,再加上一个可训练偏置,最后将计算结果传入双曲正切函数tanh激活;

输出特征图大小=6张14x14的特征图,池化降维;

神经元数量=所有特征图像素数量和=14x14x6=;

可训练参数量=(1+1)x6=12,每张特征图都使用了相乘的“可训练参数”和“可训练偏置”;

连接数=特征图的各像素与其对应的采样核的各参数之间的连接数=14x14x6x(2x2+1)=.

卷积层C3

输入=6张14x14的特征图;

卷积核参数=16个大小为5x5的卷积核,步长为1,无填充;

输出特征图大小=输入图像-卷积核+1=10,即10x10x16;

该层不同于卷积层C1,而是存在多个卷积核对应多个输入,此时采用的是“每个卷积核对应多张特征图”来处理;论文中分成4种不同的组合方式,如下图红色框:

组合1:前6个卷积核处理三张连续的特征图;

组合2:之后6个卷积核处理四张连续的特征图;

组合3:之后3个卷积核处理四张两两连续的特征图;

组合4:最后一个卷积核处理全部六张特征图。

神经元数量=所有特征图像素数量和=10x10x16=;

可训练参数量=所有卷积核组合的参数和;

组合1有6个卷积核,每个卷积核要作用在3张特征图上,故组合1可训练参数=6x(3x5x5+1),

同理,组合2参数=6x(4x5x5+1),组合3参数=3x(4x5x5+1),组合4参数=1x(6x5x5+1),求和得可训练参数=个;

连接数=特征图的各像素与其对应的卷积核的各参数之间的连接数=10x10x=15。

C3层这么做的原因是打破图像的对称性,并减少连接的数量。如果不这样做的话,每一个卷积核扫描一层之后是10x10,一个核大小是5x5,输入6个通道,输出16个,所以是10x10x5x5x6x16=个连接。但实际上只有15连接。训练参数的数量从变成了个。

池化层S4

输入=16张10x10的特征图;

采样区域=2x2,步长为2,采样方式为4个输入相加然后乘以一个可训练参数,再加上一个可训练偏置,最后将计算结果传入双曲正切函数tanh激活;

输出特征图大小=16张5x5的特征图,池化降维;

神经元数量=所有特征图像素数量和=5x5x16=;

可训练参数量=2x16=32,每张特征图都使用了相乘的“可训练参数”和“可训练偏置”;

连接数=特征图的各像素与其对应的采样核的各参数(2x2的采样区间和1个偏置)之间的连接数=5x5x16x(2x2+1)=.

卷积层C5

输入=16张5x5的特征图;

卷积核参数=个大小为5x5的卷积核,步长为1,无填充;

输出=个1x1的特征图(向量);

算法过程:每个卷积核与16张特征图做卷积,相当于每个卷积核有16个channel,得到结果求和,再加上一个偏置;

可训练参数量=(卷积核参数量x特征图个数+偏置)x卷积核个数=(5x5x16+1)x=48;

连接数=特征图的各像素与其对应的卷积核的各参数之间的连接数=1x1x(5x5x16+1)x=48。

全连接层F6

输入=[,1,1],即个1x1的特征图(向量);

输出层=84个隐藏单元,与C5层全连接(之所以是84个神经元,是由于我们的输出是10);

可训练参数量=*84+84=;

算法过程:该层会对输入向量和权值向量做点积,然后再加上偏置,最后再传入激活函数tanh中;

激活函数:f=Atanh(Sa)=1.Tanh((2/3)*a);

Output层

输入=84个向量

输出层由欧式径向基函数单元组成,输出单元是10个,因为数字识别是0-9,每个单元有84个输入。

该层实际相当于一个特征匹配,论文中对0~9这10个数字,提取像素编码形成对应的向量。然后对F6层的84个输出向量分别和10个数字的像素编码向量求欧式距离(使用的是欧式径向基函数RBF),以此衡量输出。两者距离越小,则对应类别的概率越高;反之,两者距离越大,对应类别的概率越低。

一个特定RBF的输出可以被解释为一个惩罚项,衡量输入图案和与RBF相关的类的模型之间的契合度。

RBF输出计算函数如下:

上式中i取值从0到9,j取值从0到7*12-1,wij的值由数字i的比特图编码(即上图展示的ASCII码比特图编码)确定。RBF输出的值越接近于0,则越接近于i,即越接近于i的ASCII编码图,表示当前网络输入的识别结果是字符i。本质上是比较“模型预测的数字比特图”与“真实比特图”之间的相似度。

数字1的像素编码如下:

RBF参数向量起着F6层目标向量的角色,同时这些向量的成分是+1和-1,正好在F6激活函数的范围内,因此可以防止函数饱和。

上面是对LeNet5结构的简单介绍,下面补充一些细节。

数据集的处理部分

MNIST数据集中的图片尺寸是[28,28],且是单通道灰度图,像素值范围是[0,]的整数。由于网络中使用的激活函数是与tanh相关的函数,为了能让训练过程尽可能在激活函数的线性区内,需要对数据的像素数值分布从[0,]转换为均值为0,方差为1的近似区间。作者采用的是把图片像素值范围转换为[-0.1,1.]之间,即背景为-0.1,前景字体为1..

作者认为这样可以加速训练学习,那么为什么0均值,方差=1可以加快训练?首先,图像数据是高度相关的,如果我们对图像减均值(也就是0均值),可以使得图像数据分布在原点附近,而神经网络初始化参数一般都是0均值的,所以用0均值的参数去拟合0均值的数据就会比较快。如果不减均值,那么需要经过多次学习才能拟合。

手写字体识别流程:

(1)定义超参数;(2)构建transforms(主要是对图像做变换);(3)下载、加载数据集MNIST;(4)构建网络模型;(5)定义优化器;(6)定义训练方法;(7)定义测试方法;(8)训练模型并输出预测结果。

基于PyTorch的LeNet5网络结构的简洁实现如下(详细复现见参考链接):

参考




转载请注明:http://www.aierlanlan.com/rzfs/5588.html

  • 上一篇文章:
  •   
  • 下一篇文章: