lenet_lenet5 - CSDN
精华内容
参与话题
  • 大话CNN经典模型:LeNet

    千次阅读 2018-03-11 01:40:49
    —— 原文发布于本人的微信公众号“大数据与人工智能Lab”(BigdataAILab),欢迎...CNN发展至今,已经有很多变种,其中有几个经典模型在CNN发展历程中有着里程碑的意义,它们分别是:LeNet、Alexnet、Googlenet、...

    —— 原文发布于本人的微信公众号“大数据与人工智能Lab”(BigdataAILab),欢迎关注。

     

    近几年来,卷积神经网络(Convolutional Neural Networks,简称CNN)在图像识别中取得了非常成功的应用,成为深度学习的一大亮点。CNN发展至今,已经有很多变种,其中有几个经典模型在CNN发展历程中有着里程碑的意义,它们分别是:LeNet、Alexnet、Googlenet、VGG、DRL等,接下来将分期进行逐一介绍。
    在之前的文章中,已经介绍了卷积神经网络(CNN)的技术原理,细节部分就不再重复了,有兴趣的同学再打开链接看看,在此简单回顾一下CNN的几个特点:局部感知、参数共享、池化。
    1、局部感知
    人类对外界的认知一般是从局部到全局、从片面到全面,类似的,在机器识别图像时也没有必要把整张图像按像素全部都连接到神经网络中,在图像中也是局部周边的像素联系比较紧密,而距离较远的像素则相关性较弱,因此可以采用局部连接的模式(将图像分块连接,这样能大大减少模型的参数),如下图所示:
     
    2、参数(权值)共享
    每张自然图像(人物、山水、建筑等)都有其固有特性,也就是说,图像其中一部分的统计特性与其它部分是接近的。这也意味着这一部分学习的特征也能用在另一部分上,能使用同样的学习特征。因此,在局部连接中隐藏层的每一个神经元连接的局部图像的权值参数(例如5×5),将这些权值参数共享给其它剩下的神经元使用,那么此时不管隐藏层有多少个神经元,需要训练的参数就是这个局部图像的权限参数(例如5×5),也就是卷积核的大小,这样大大减少了训练参数。如下图
     
    3、池化
    随着模型网络不断加深,卷积核越来越多,要训练的参数还是很多,而且直接拿卷积核提取的特征直接训练也容易出现过拟合的现象。回想一下,之所以对图像使用卷积提取特征是因为图像具有一种“静态性”的属性,因此,一个很自然的想法就是对不同位置区域提取出有代表性的特征(进行聚合统计,例如最大值、平均值等),这种聚合的操作就叫做池化,池化的过程通常也被称为特征映射的过程(特征降维),如下图:
     
    回顾了卷积神经网络(CNN)上面的三个特点后,下面来介绍一下CNN的经典模型:手写字体识别模型LeNet5
    LeNet5诞生于1994年,是最早的卷积神经网络之一, 由Yann LeCun完成,推动了深度学习领域的发展。在那时候,没有GPU帮助训练模型,甚至CPU的速度也很慢,因此,LeNet5通过巧妙的设计,利用卷积、参数共享、池化等操作提取特征,避免了大量的计算成本,最后再使用全连接神经网络进行分类识别,这个网络也是最近大量神经网络架构的起点,给这个领域带来了许多灵感。
    LeNet5的网络结构示意图如下所示:
     
    LeNet5由7层CNN(不包含输入层)组成,上图中输入的原始图像大小是32×32像素,卷积层用Ci表示,子采样层(pooling,池化)用Si表示,全连接层用Fi表示。下面逐层介绍其作用和示意图上方的数字含义。
    1、C1层(卷积层):6@28×28
    该层使用了6个卷积核,每个卷积核的大小为5×5,这样就得到了6个feature map(特征图)。
    (1)特征图大小
    每个卷积核(5×5)与原始的输入图像(32×32)进行卷积,这样得到的feature map(特征图)大小为(32-5+1)×(32-5+1)= 28×28
    卷积过程如下图所示:
     
    卷积核与输入图像按卷积核大小逐个区域进行匹配计算,匹配后原始输入图像的尺寸将变小,因为边缘部分卷积核无法越出界,只能匹配一次,如上图,匹配计算后的尺寸变为Cr×Cc=(Ir-Kr+1)×(Ic-Kc+1),其中Cr、Cc,Ir、Ic,Kr、Kc分别表示卷积后结果图像、输入图像、卷积核的行列大小。
    (2)参数个数
    由于参数(权值)共享的原因,对于同个卷积核每个神经元均使用相同的参数,因此,参数个数为(5×5+1)×6= 156,其中5×5为卷积核参数,1为偏置参数
    (3)连接数
    卷积后的图像大小为28×28,因此每个特征图有28×28个神经元,每个卷积核参数为(5×5+1)×6,因此,该层的连接数为(5×5+1)×6×28×28=122304
    2、S2层(下采样层,也称池化层):6@14×14
    (1)特征图大小

    这一层主要是做池化或者特征映射(特征降维),池化单元为2×2,因此,6个特征图的大小经池化后即变为14×14。回顾本文刚开始讲到的池化操作,池化单元之间没有重叠,在池化区域内进行聚合统计后得到新的特征值,因此经2×2池化后,每两行两列重新算出一个特征值出来,相当于图像大小减半,因此卷积后的28×28图像经2×2池化后就变为14×14。
    这一层的计算过程是:2×2 单元里的值相加,然后再乘以训练参数w,再加上一个偏置参数b(每一个特征图共享相同的w和b),然后取sigmoid值(S函数:0-1区间),作为对应的该单元的值。卷积操作与池化的示意图如下:
     
    (2)参数个数
    S2层由于每个特征图都共享相同的w和b这两个参数,因此需要2×6=12个参数
    (3)连接数
    下采样之后的图像大小为14×14,因此S2层的每个特征图有14×14个神经元,每个池化单元连接数为2×2+1(1为偏置量),因此,该层的连接数为(2×2+1)×14×14×6 = 5880
    3、C3层(卷积层):16@10×10
    C3层有16个卷积核,卷积模板大小为5×5。
    (1)特征图大小
    与C1层的分析类似,C3层的特征图大小为(14-5+1)×(14-5+1)= 10×10
    (2)参数个数
    需要注意的是,C3与S2并不是全连接而是部分连接,有些是C3连接到S2三层、有些四层、甚至达到6层,通过这种方式提取更多特征,连接的规则如下表所示:
     
    例如第一列表示C3层的第0个特征图(feature map)只跟S2层的第0、1和2这三个feature maps相连接,计算过程为:用3个卷积模板分别与S2层的3个feature maps进行卷积,然后将卷积的结果相加求和,再加上一个偏置,再取sigmoid得出卷积后对应的feature map了。其它列也是类似(有些是3个卷积模板,有些是4个,有些是6个)。因此,C3层的参数数目为(5×5×3+1)×6 +(5×5×4+1)×9 +5×5×6+1 = 1516
    (3)连接数
    卷积后的特征图大小为10×10,参数数量为1516,因此连接数为1516×10×10= 151600
    4、S4(下采样层,也称池化层):16@5×5
    (1)特征图大小

    与S2的分析类似,池化单元大小为2×2,因此,该层与C3一样共有16个特征图,每个特征图的大小为5×5。
    (2)参数数量
    与S2的计算类似,所需要参数个数为16×2 = 32
    (3)连接数
    连接数为(2×2+1)×5×5×16 = 2000
    5、C5层(卷积层):120
    (1)特征图大小

    该层有120个卷积核,每个卷积核的大小仍为5×5,因此有120个特征图。由于S4层的大小为5×5,而该层的卷积核大小也是5×5,因此特征图大小为(5-5+1)×(5-5+1)= 1×1。这样该层就刚好变成了全连接,这只是巧合,如果原始输入的图像比较大,则该层就不是全连接了。
    (2)参数个数
    与前面的分析类似,本层的参数数目为120×(5×5×16+1) = 48120
    (3)连接数
    由于该层的特征图大小刚好为1×1,因此连接数为48120×1×1=48120
    6、F6层(全连接层):84
    (1)特征图大小

    F6层有84个单元,之所以选这个数字的原因是来自于输出层的设计,对应于一个7×12的比特图,如下图所示,-1表示白色,1表示黑色,这样每个符号的比特图的黑白色就对应于一个编码。
     
    该层有84个特征图,特征图大小与C5一样都是1×1,与C5层全连接。
    (2)参数个数
    由于是全连接,参数数量为(120+1)×84=10164。跟经典神经网络一样,F6层计算输入向量和权重向量之间的点积,再加上一个偏置,然后将其传递给sigmoid函数得出结果。
    (3)连接数
    由于是全连接,连接数与参数数量一样,也是10164。
    7、OUTPUT层(输出层):10
    Output层也是全连接层,共有10个节点,分别代表数字0到9。如果第i个节点的值为0,则表示网络识别的结果是数字i。
    (1)特征图大小
    该层采用径向基函数(RBF)的网络连接方式,假设x是上一层的输入,y是RBF的输出,则RBF输出的计算方式是:
     
    上式中的Wij的值由i的比特图编码确定,i从0到9,j取值从0到7×12-1。RBF输出的值越接近于0,表示当前网络输入的识别结果与字符i越接近。
    (2)参数个数
    由于是全连接,参数个数为84×10=840
    (3)连接数
    由于是全连接,连接数与参数个数一样,也是840

    通过以上介绍,已经了解了LeNet各层网络的结构、特征图大小、参数数量、连接数量等信息,下图是识别数字3的过程,可对照上面介绍各个层的功能进行一一回顾:
     

    墙裂建议

    Ann LeCun 在1998年发表了关于LeNet的经典论文《Gradient-Based Learning Applied to Document Recognition 》(基于梯度学习在文档识别中的应用),里面有非常详细介绍,建议阅读这篇论文,进一步巩固知识。

    扫描以下二维码关注本人公众号“大数据与人工智能Lab”(BigdataAILab),然后回复“论文”关键字可在线阅读这篇经典论文的内容。


    推荐相关阅读

    展开全文
  • LeNet详解

    万次阅读 多人点赞 2018-08-06 20:44:06
    LeNet-5是一个较简单的卷积神经网络。下图显示了其结构:输入的二维图像,先经过两次卷积层到池化层,再经过全连接层,最后使用softmax分类作为输出层。关于CNN参见:...

           LeNet-5是一个较简单的卷积神经网络。下图显示了其结构:输入的二维图像,先经过两次卷积层到池化层,再经过全连接层,最后使用softmax分类作为输出层。关于CNN参见:https://blog.csdn.net/qq_42570457/article/details/81458077

    网络解析(一):LeNet-5详解

           LeNet-5 这个网络虽然很小,但是它包含了深度学习的基本模块:卷积层,池化层,全连接层。是其他深度学习模型的基础, 这里我们对LeNet-5进行深入分析。同时,通过实例分析,加深对与卷积层和池化层的理解。

    网络解析(一):LeNet-5详解

           LeNet-5共有7层,不包含输入,每层都包含可训练参数;每个层有多个Feature Map,每个FeatureMap通过一种卷积滤波器提取输入的一种特征,然后每个FeatureMap有多个神经元。

    各层参数详解:

    1、INPUT层-输入层

           首先是数据 INPUT 层,输入图像的尺寸统一归一化为32*32。

           注意:本层不算LeNet-5的网络结构,传统上,不将输入层视为网络层次结构之一。

    2、C1层-卷积层

          输入图片:32*32

          卷积核大小:5*5

          卷积核种类:6

          输出featuremap大小:28*28 (32-5+1)=28

          神经元数量:28*28*6

          可训练参数:(5*5+1) * 6(每个滤波器5*5=25个unit参数和一个bias参数,一共6个滤波器)

          连接数:(5*5+1)*6*28*28=122304

         详细说明:对输入图像进行第一次卷积运算(使用 6 个大小为 5*5 的卷积核),得到6个C1特征图(6个大小为28*28的 feature maps, 32-5+1=28)。我们再来看看需要多少个参数,卷积核的大小为5*5,总共就有6*(5*5+1)=156个参数,其中+1是表示一个核有一个bias。对于卷积层C1,C1内的每个像素都与输入图像中的5*5个像素和1个bias有连接,所以总共有156*28*28=122304个连接(connection)。有122304个连接,但是我们只需要学习156个参数,主要是通过权值共享实现的。

    3、S2层-池化层(下采样层)

          输入:28*28

          采样区域:2*2

          采样方式:4个输入相加,乘以一个可训练参数,再加上一个可训练偏置。结果通过sigmoid

          采样种类:6

          输出featureMap大小:14*14(28/2)

          神经元数量:14*14*6

          可训练参数:2*6(和的权+偏置)

          连接数:(2*2+1)*6*14*14

          S2中每个特征图的大小是C1中特征图大小的1/4。

           详细说明:第一次卷积之后紧接着就是池化运算,使用 2*2核 进行池化,于是得到了S2,6个14*14的 特征图(28/2=14)。S2这个pooling层是对C1中的2*2区域内的像素求和乘以一个权值系数再加上一个偏置,然后将这个结果再做一次映射。于是每个池化核有两个训练参数,所以共有2x6=12个训练参数,但是有5x14x14x6=5880个连接。

    4、C3层-卷积层

           输入:S2中所有6个或者几个特征map组合

          卷积核大小:5*5

          卷积核种类:16

          输出featureMap大小:10*10 (14-5+1)=10

          C3中的每个特征map是连接到S2中的所有6个或者几个特征map的,表示本层的特征map是上一层提取到的特征map的不同组合。

           存在的一个方式是:C3的前6个特征图以S2中3个相邻的特征图子集为输入。接下来6个特征图以S2中4个相邻特征图子集为输入。然后的3个以不相邻的4个特征图子集为输入。最后一个将S2中所有特征图为输入。则:可训练参数:6*(3*5*5+1)+6*(4*5*5+1)+3*(4*5*5+1)+1*(6*5*5+1)=1516

           连接数:10*10*1516=151600

           详细说明:第一次池化之后是第二次卷积,第二次卷积的输出是C3,16个10x10的特征图,卷积核大小是 5*5. 我们知道S2 有6个 14*14 的特征图,怎么从6 个特征图得到 16个特征图了? 这里是通过对S2 的特征图特殊组合计算得到的16个特征图。具体如下:

    网络解析(一):LeNet-5详解

           C3的前6个feature map(对应上图第一个红框的6列)与S2层相连的3个feature map相连接(上图第一个红框),后面6个feature map与S2层相连的4个feature map相连接(上图第二个红框),后面3个feature map与S2层部分不相连的4个feature map相连接,最后一个与S2层的所有feature map相连。卷积核大小依然为5*5,所以总共有6*(3*5*5+1)+6*(4*5*5+1)+3*(4*5*5+1)+1*(6*5*5+1)=1516个参数。而图像大小为10*10,所以共有151600个连接。

    网络解析(一):LeNet-5详解

            C3与S2中前3个图相连的卷积结构如下图所示:

    网络解析(一):LeNet-5详解

           上图对应的参数为 3*5*5+1,一共进行6次卷积得到6个特征图,所以有6*(3*5*5+1)参数。 为什么采用上述这样的组合了?论文中说有两个原因:1)减少参数,2)这种不对称的组合连接的方式有利于提取多种组合特征。

    5、S4层-池化层(下采样层)

           输入:10*10

           采样区域:2*2

          采样方式:4个输入相加,乘以一个可训练参数,再加上一个可训练偏置。结果通过sigmoid

          采样种类:16

          输出featureMap大小:5*5(10/2)

          神经元数量:5*5*16=400

          可训练参数:2*16=32(和的权+偏置)

          连接数:16*(2*2+1)*5*5=2000

          S4中每个特征图的大小是C3中特征图大小的1/4

          详细说明:S4是pooling层,窗口大小仍然是2*2,共计16个feature map,C3层的16个10x10的图分别进行以2x2为单位的池化得到16个5x5的特征图。这一层有2x16共32个训练参数,5x5x5x16=2000个连接。连接的方式与S2层类似。

    6、C5层-卷积层

         输入:S4层的全部16个单元特征map(与s4全相连)

         卷积核大小:5*5

         卷积核种类:120

         输出featureMap大小:1*1(5-5+1)

         可训练参数/连接:120*(16*5*5+1)=48120

         详细说明:C5层是一个卷积层。由于S4层的16个图的大小为5x5,与卷积核的大小相同,所以卷积后形成的图的大小为1x1。这里形成120个卷积结果。每个都与上一层的16个图相连。所以共有(5x5x16+1)x120 = 48120个参数,同样有48120个连接。C5层的网络结构如下:

    网络解析(一):LeNet-5详解

    7、F6层-全连接层

          输入:c5 120维向量

          计算方式:计算输入向量和权重向量之间的点积,再加上一个偏置,结果通过sigmoid函数输出。

          可训练参数:84*(120+1)=10164

          详细说明:6层是全连接层。F6层有84个节点,对应于一个7x12的比特图,-1表示白色,1表示黑色,这样每个符号的比特图的黑白色就对应于一个编码。该层的训练参数和连接数是(120 + 1)x84=10164。ASCII编码图如下:

    网络解析(一):LeNet-5详解

         F6层的连接方式如下:

    网络解析(一):LeNet-5详解

    8、Output层-全连接层

           Output层也是全连接层,共有10个节点,分别代表数字0到9,且如果节点i的值为0,则网络识别的结果是数字i。采用的是径向基函数(RBF)的网络连接方式。假设x是上一层的输入,y是RBF的输出,则RBF输出的计算方式是:

    网络解析(一):LeNet-5详解

         上式w_ij 的值由i的比特图编码确定,i从0到9,j取值从0到7*12-1。RBF输出的值越接近于0,则越接近于i,即越接近于i的ASCII编码图,表示当前网络输入的识别结果是字符i。该层有84x10=840个参数和连接。

    网络解析(一):LeNet-5详解

    上图是LeNet-5识别数字3的过程。

    总结

    • LeNet-5是一种用于手写体字符识别的非常高效的卷积神经网络。
    • 卷积神经网络能够很好的利用图像的结构信息。
    • 卷积层的参数较少,这也是由卷积层的主要特性即局部连接和共享权重所决定。

     参考:http://cuijiahua.com/blog/2018/01/dl_3.html

    展开全文
  • 经典CNN之:LeNet介绍

    万次阅读 多人点赞 2018-04-13 17:52:35
    手写字体识别模型LeNet5诞生于1994年,是最早的卷积神经网络之一。LeNet5通过巧妙的设计,利用卷积、参数共享、池化等操作提取特征,避免了大量的计算成本,最后再使用全连接神经网络进行分类识别,这个网络也是最近...

    手写字体识别模型LeNet5诞生于1994年,是最早的卷积神经网络之一。LeNet5通过巧妙的设计,利用卷积、参数共享、池化等操作提取特征,避免了大量的计算成本,最后再使用全连接神经网络进行分类识别,这个网络也是最近大量神经网络架构的起点。

    LeNet5的网络结构示意图如下所示:
    这里写图片描述
    LeNet5由7层CNN(不包含输入层)组成,上图中输入的原始图像大小是32×32像素,卷积层用Ci表示,子采样层(pooling,池化)用Si表示,全连接层用Fi表示。下面逐层介绍其作用和示意图上方的数字含义。
    1、C1层(卷积层):6@28×28
    该层使用了6个卷积核,每个卷积核的大小为5×5,这样就得到了6个feature map(特征图)。
    (1)特征图大小
    每个卷积核(5×5)与原始的输入图像(32×32)进行卷积,这样得到的feature map(特征图)大小为(32-5+1)×(32-5+1)= 28×28

    卷积核与输入图像按卷积核大小逐个区域进行匹配计算,匹配后原始输入图像的尺寸将变小,因为边缘部分卷积核无法越出界,只能匹配一次,匹配计算后的尺寸变为Cr×Cc=(Ir-Kr+1)×(Ic-Kc+1),其中Cr、Cc,Ir、Ic,Kr、Kc分别表示卷积后结果图像、输入图像、卷积核的行列大小。
    (2)参数个数
    由于参数(权值)共享的原因,对于同个卷积核每个神经元均使用相同的参数,因此,参数个数为(5×5+1)×6= 156,其中5×5为卷积核参数,1为偏置参数
    (3)连接数
    卷积后的图像大小为28×28,因此每个特征图有28×28个神经元,每个卷积核参数为(5×5+1)×6,因此,该层的连接数为(5×5+1)×6×28×28=122304
    2、S2层(下采样层,也称池化层):6@14×14
    (1)特征图大小
    这一层主要是做池化或者特征映射(特征降维),池化单元为2×2,因此,6个特征图的大小经池化后即变为14×14。回顾本文刚开始讲到的池化操作,池化单元之间没有重叠,在池化区域内进行聚合统计后得到新的特征值,因此经2×2池化后,每两行两列重新算出一个特征值出来,相当于图像大小减半,因此卷积后的28×28图像经2×2池化后就变为14×14。
    这一层的计算过程是:2×2 单元里的值相加,然后再乘以训练参数w,再加上一个偏置参数b(每一个特征图共享相同的w和b),然后取sigmoid值(S函数:0-1区间),作为对应的该单元的值。卷积操作与池化的示意图如下:
    这里写图片描述
    (2)参数个数
    S2层由于每个特征图都共享相同的w和b这两个参数,因此需要2×6=12个参数
    (3)连接数
    下采样之后的图像大小为14×14,因此S2层的每个特征图有14×14个神经元,每个池化单元连接数为2×2+1(1为偏置量),因此,该层的连接数为(2×2+1)×14×14×6 = 5880
    3、C3层(卷积层):16@10×10
    C3层有16个卷积核,卷积模板大小为5×5。
    (1)特征图大小
    与C1层的分析类似,C3层的特征图大小为(14-5+1)×(14-5+1)= 10×10
    (2)参数个数
    需要注意的是,C3与S2并不是全连接而是部分连接,有些是C3连接到S2三层、有些四层、甚至达到6层,通过这种方式提取更多特征,连接的规则如下表所示:
    这里写图片描述

    例如第一列表示C3层的第0个特征图(feature map)只跟S2层的第0、1和2这三个feature maps相连接,计算过程为:用3个卷积模板分别与S2层的3个feature maps进行卷积,然后将卷积的结果相加求和,再加上一个偏置,再取sigmoid得出卷积后对应的feature map了。其它列也是类似(有些是3个卷积模板,有些是4个,有些是6个)。因此,C3层的参数数目为(5×5×3+1)×6 +(5×5×4+1)×9 +5×5×6+1 = 1516
    (3)连接数
    卷积后的特征图大小为10×10,参数数量为1516,因此连接数为1516×10×10= 151600
    4、S4(下采样层,也称池化层):16@5×5
    (1)特征图大小
    与S2的分析类似,池化单元大小为2×2,因此,该层与C3一样共有16个特征图,每个特征图的大小为5×5。
    (2)参数数量
    与S2的计算类似,所需要参数个数为16×2 = 32
    (3)连接数
    连接数为(2×2+1)×5×5×16 = 2000
    5、C5层(卷积层):120
    (1)特征图大小
    该层有120个卷积核,每个卷积核的大小仍为5×5,因此有120个特征图。由于S4层的大小为5×5,而该层的卷积核大小也是5×5,因此特征图大小为(5-5+1)×(5-5+1)= 1×1。这样该层就刚好变成了全连接,这只是巧合,如果原始输入的图像比较大,则该层就不是全连接了。
    (2)参数个数
    与前面的分析类似,本层的参数数目为120×(5×5×16+1) = 48120
    (3)连接数
    由于该层的特征图大小刚好为1×1,因此连接数为48120×1×1=48120
    6、F6层(全连接层):84
    (1)特征图大小
    F6层有84个单元,之所以选这个数字的原因是来自于输出层的设计,对应于一个7×12的比特图,如下图所示,-1表示白色,1表示黑色,这样每个符号的比特图的黑白色就对应于一个编码。
    这里写图片描述
    该层有84个特征图,特征图大小与C5一样都是1×1,与C5层全连接。
    (2)参数个数
    由于是全连接,参数数量为(120+1)×84=10164。跟经典神经网络一样,F6层计算输入向量和权重向量之间的点积,再加上一个偏置,然后将其传递给sigmoid函数得出结果。
    (3)连接数
    由于是全连接,连接数与参数数量一样,也是10164。
    7、OUTPUT层(输出层):10
    Output层也是全连接层,共有10个节点,分别代表数字0到9。如果第i个节点的值为0,则表示网络识别的结果是数字i。
    (1)特征图大小
    该层采用径向基函数(RBF)的网络连接方式,假设x是上一层的输入,y是RBF的输出,则RBF输出的计算方式是:
    这里写图片描述
    上式中的Wij的值由i的比特图编码确定,i从0到9,j取值从0到7×12-1。RBF输出的值越接近于0,表示当前网络输入的识别结果与字符i越接近。
    (2)参数个数
    由于是全连接,参数个数为84×10=840
    (3)连接数
    由于是全连接,连接数与参数个数一样,也是840

    展开全文
  • 深度学习 --- 卷积神经网络CNN(LeNet-5网络详解)

    万次阅读 多人点赞 2018-11-26 12:07:34
    卷积神经网络(Convolutional Neural Network,CNN)是一种前馈型的神经...本节打算先介绍背景和简单的基本概念术语,然后详细介绍LeNet-5网络,其工作流程大家需要先搞清楚,学习原理其实是基于BP学习原理的,只...

    卷积神经网络(Convolutional Neural Network,CNN)是一种前馈型的神经网络,其在大型图像处理方面有出色的表现,目前已经被大范围使用到图像分类、定位等领域中。相比于其他神经网络结构,卷积神经网络需要的参数相对较少,使的其能够广泛应用。

    本节打算先介绍背景和简单的基本概念术语,然后详细介绍LeNet-5网络,其工作流程大家需要先搞清楚,学习原理其实是基于BP学习原理的,只是稍微有点麻烦点,这个在后面会单独讲,希望先从定性的角度去学习他,然后在定量的分析其学习过程,这样更容易接受,掌握这些以后再看hintion的学生的一篇论文深度卷积神经网络《ImageNet Classification with Deep Convolutional  Neural Networks》,在后面会详细探讨这个神经网络优化方面的思想和手段,因此这将是一个很长的学习过程,要研究咱就把他研究透,只有这样你才有可能具有创造性解决问题的能力。当然,有前面的那么多的知识的铺垫,理解这里的就不会太困难了,好,废话不多说,下面开始:

    发展背景和基本概念

            卷积神经网络是目前深度学习技术领域中非常具有代表性的神经网络之一,在图像分析和处理领域取得了众多突破性的进展,在学术界常用的标准图像标注集ImageNet上,基于卷积神经网络取得了很多成就,包括图像特征提取分类、场景识别等。卷积神经网络相较于传统的图像处理算法的优点之一在于避免了对图像复杂的前期预处理过程,尤其是人工参与图像预处理过程,卷积神经网络可以直接输入原始图像进行一系列工作,至今己经广泛应用于各类图像相关的应用中。
           从卷积神经网络的提出到目前的广泛应用,大致经历了理论萌芽阶段、实验发展阶段以及大规模应用和深入研究阶段。
    (1)理论萌芽阶段。1962年Hubel以及Wiesel通过生物学研究表明,从视网膜传递脑中的视觉信息是通过多层次的感受野(Receptive Field)激发完成的,并首先提出了感受野的概念。1980年日本学者Fukushima在基于感受野的概念基础之上,提出了神经认知机(Neocognitron)。神经认知机是一个自组织的多层神经网络模型,每一层的响应都由上一层的局部感受野激发得到,对于模式的识别不受位置、较小形状变化以及尺度大小的影响。神经认知机可以理解为卷积神经网络的第一版,核心点在于将视觉系统模型化,并且不受视觉中的位置和大小等影响。 

    (2)实验发展阶段。1998年计算机科学家Yann LeCun等提出的LeNet5采用了基于梯度的反向传播算法对网络进行有监督的训练,Yann LeCun在机器学习、计算机视觉等都有杰出贡献,被誉为卷积神经网络之父。LeNet5网络通过交替连接的卷积层和下采样层,将原始图像逐渐转换为一系列的特征图,并且将这些特征传递给全连接的神经网络,以根据图像的特征对图像进行分类。感受野是卷积神经网络的核心,卷积神经网络的卷积核则是感受野概念的结构表现。学术界对于卷积神经网络的关注,也正是开始于LeNet5网络的提出,并成功应用于手写体识别。同时,卷积神经网络在语音识别、物体检测、人脸识别等应用领域的研究也逐渐开展起来。
    (3)大规模应用和深入研究阶段。在LeNet5网络之后,卷积神经网络一直处于实验发展阶段。直到2012年AlexNet网络的提出才奠定了卷积神经网络在深度学习应用中的地位,Krizhevsky(他是hintion的学生对应的论文就是刚开始提到的深度卷积神经网络)等提出的卷积神经网络AlexNet在ImageNet的训练集上取得了图像分类的冠军,使得卷积神经网络成为计算机视觉中的重点研究对象,并且不断深入。在AlexNet之后,不断有新的卷积神经网络提出,包括牛津大学的VGG网络、微软的ResNet网络、谷歌的GoogLeNet网络等,这些网络的提出使得卷积神经网络逐步开始走向商业化应用,几乎只要是存在图像的地方,就会有卷积神经网络的身影。
           从目前的发展趋势而言,卷积神经网络将依然会持续发展,并且会产生适合各类应用场景的卷积神经网络,例如,面向视频理解的3D卷积神经网络等。值得说明的是,卷积神经网络不仅仅应用于图像相关的网络,还包括与图像相似的网络,例如,在围棋中分析棋盘等。

    基本概念

     卷积神经网络中有三个基本的概念:局部感受野(Local Receptive Fields)、共享权值(Shared Weights)、池化(Pooling)。
    (1)局部感受野。对于一般的深度神经网络,往往会把图像的每一个像素点连接到全连接的每一个神经元中,而卷积神经网络则是把每一个隐藏节点只连接到图像的某个局部区域,从而减少参数训练的数量。例如,一张1024×720的图像,使用9×9的感受野,则只需要81个权值参数。对于一般的视觉也是如此,当观看一张图像时,更多的时候关注的是局部。
    (2)共享权值。在卷积神经网络的卷积层中,神经元对应的权值是相同的,由于权值相同,因此可以减少训练的参数量。共享的权值和偏置也被称作卷积核或滤汲器。
    (3)池化。由于待处理的图像往往都比较大,而在实际过程中,没有必要对原图进行分析,能够有效获得图像的特征才是最主要的,因此可以采用类似于图像压缩的思想,对图像进行卷积之后,通过一个下采样过程,来调整图像的大小。

    LeNet-5网络

    本网络的的讲解主要参考1998年计算机科学家Yann LeCun发布的一篇论文《Gradient based learning applied to document-recognition》大家可以找到这篇论文结合学习,针对该网络,首先大家需要了解一下图像中的常用操作卷积,卷积这个词是信号处理领域的词,表示一个系统多数据处理的过程,在图像处理中的卷积,其实就是滤波器。下面先简要介绍一下卷积核的概念,这个不能细说,因为想要深入理解卷积需要很多知识,这里只给大家一个直观的概念,随着我们后面的不断深入,在优化时在讨论卷积核如何设置。

    开始前先普及一下基础知识,我们所知说的图片是通过像素来定义的,即每个像素点的颜色不同,其对应的颜色值不同,例如黑白图片的颜色值为0到255,手写体字符,白色的地方为0,黑色为1,如下图,也就是说我们平常说的像素其实就是图片的最小组成,黑白只是0-255,彩色其实就是RGB即三层基色合成的,就可以通过三层下图数值代表即可。

    image

    卷积核

    大家可以简单理解,卷积核的的目的就是提取特征,那什么是特征呢?这篇文章我讲解了什么是特征。如果大家对卷积核感兴趣可以搜索一下看看,本人本科是电子信息工程的,所有这些概念我都已经深入理解了。下面看看卷积对图像到底做了哪些事:

    å¾1    æµ®é

    如何达到上面的效果呢?我们看看下图:

     中间那个就是卷积核了,其实就是3x3的方格,里面填一些数字,然后和原始图像进行相乘求和,这样就可以达到上面的效果。

    通过卷积核就可以提取图片的特征和压缩图片了,其实卷积核就是一个二维的滤波器,下面再给一个大家到处能看到的动态卷积图:

    å·ç§¯ç¥ç»ç½ç»

    大家先感性的这里理解,等深入知道CNN后再仔细研究也不迟,下面我们就正式开始讲解 LeNet5网络。

     

    因为我们应对的领域是图像识别的领域同时网络的类型是基于BP的,因此针对这个领域先看看BP的缺点,我们知道BP网络是全连接的,对于图片的识别,我们不用提取特征,一般一层提取特征的效果并不是很好,因此我们需要很多层,如果按照BP进行全连接,会使得权值数量急剧增加,想要训练这么多的权值,样本必须足够的才行,即使样本数量够,但是计算量也会急剧增加,而且还有面临梯度消失的情况,因此需要改进连接的方式即采用局部连接和权值共享,如下图:

    假如一张图片的像素点为4x4的,上图的左边图W为全连接,一个神经元就有16个连接 ,每个连接的权值不同,因此如果有n个神经元则有16n个权值,左图就是局部连接,此时加入四个像素点连接一个神经元,则需要四个,但是如果像素很多的情况下,权值还是很多,此时是按照每个神经元的连接权值如上图的w_1,w_2,w_3,w_4是其中一个神经元的是4个权值,所谓权值共享,就是其他神经元的权值也使用这四个值,此时的位置和数值都是这样对应的,这里大家需要理解。即四个神经元只有四个不同的权值,现在我们来算算,按照右边的计算:

     全连接的权值数:4x4x4=64(前面两是像素点,后面的4是神经元,这里先不考虑偏置值) ,

    局部连接的权值:4x4=16(4个神经元,每个神经元4个权值)

    局部连接和权值共享: 4

     因此权值的数量就降低了,这就是通过局部连接和权值共享来解决BP的存在的问题,这里的理论依据就是根据上面说的感受野进行简化的,但是按照上图的局部连接存在一个问题就是边缘过度不平滑,会出现边缘效应,为了解决这个问题引入了采样窗口法使其彼此重叠,因为这样做和卷积很类似,因此采样窗口就称为卷积核了,我们看这个窗口是怎么重叠的;

     

     假如采样窗口为2x2,所谓重叠,我们每次左移一个像素点送给神经元,往下移动时也是这样的,这样就避免了边缘效应了

    到这里基本上知道由来了,下面我们就正式介绍 LeNet5网络

    我们就按照这个图详细介绍CNN,首先需要说明的是,这里先不介绍该网络的学习过程,先介绍网络的整体架构,解释每层的作用,后面再单独介绍CNN的学习算法和学习过程。

     上图包含输入层总共8层网络,分别为:

    输入层(INPUT)、卷积层(Convolutions,C1)、池化层(Subsampling,S2)、卷积层(C3)、池化层(Subsampling,S4)、卷积层(C5)、全连接层(F6)、输出层(径向基层)

    输入层(INPUT):

    输入的手写体是32x32像素的图片,在论文里说输入像素的值背景层(白色)的corresp值为-0.1,前景层(黑色)的corresp值              为 1.175。这使得平均输入大约为0,而方差大约为1,从而加速了学习,要求手写体应该在中心,即20x20以内。

    卷积层(Convolutions,C1): 提取特征

    我们从上图可以看到这里有6个特征平面(这里不应该称为卷积核,卷积核是滑动窗口,通过卷积核提取特征的结果叫特            征平面),得到的每个特征平面使用的一个5x5的卷积核(这里说明窗口滑动的权值就是卷积核的内容,这里需要注意的是特征平面有6个说明有6个不同的卷积核,因此每个特征平面所使用的权值都是一样的,这样就得到了特征平面。那么特征平面有多少神经元呢?如下图,32x32通过一个5x5的卷积核运算,根据局部连接和平滑,需要每次移动1,因此从左移动到右时是28,因此特征平面是28x28的,即每个特征平面有28x28个神经元。如下图,权值共享就是右边的神经元的权值都是w,这里大家需要好好理解,还是在解释一下,6个特征平面对应6个不同的卷积核或者6个滤波器,每个滤波器的参数值也就是权值都是一样的,下图就是卷积对应的一个特征平面,这样的平面有6个,即卷积层有6个特征平面。

    现在我们计算一下该层总共有多少个连接,有多少个待训练的权值呢?

    连接数,首先每个卷积核是5x5的,每个特征平面有28x28的神经元(每个神经元对应一个偏置值),总共有6个特征平                面,因此连接数为:(5x5+1)x28x28x6 = 122304。

    权值数,首先每个特征平面神经元共用一套权值,而每套权值取决于卷积核的大小,因此权值数为:(5x5+1)x6 = 156个

    池化层(Subsampling,S2): 降低数据维度

    池化层又叫下采样层,目的是压缩数据,降低数据维度,如下图所示,他和卷积有明显的区别,这里采样2x2的选择框进 行压缩,如何压缩呢,通过选择框的数据求和再取平均值然后在乘上一个权值和加上一个偏置值,组成一个新的图片,每个特征平面采样的权值和偏置值都是一样的,因此每个特征平面对应的采样层只两个待训练的参数。如下图4x4的图片经过采样后还剩2x2,直接压缩了4倍。本层具有激活函数,为sigmod函数,而卷积层没有激活函数。

    那我们看看S2层,他是使用2x2进行采样,原来是28x28的,采样后就是14x14,总共有6张采样平面,即每个特征平面对           应一个采样层的一个平面,总共的待训练的权值为:2x6=12

    卷积层(C3):

    这一层也是卷积层,和C2不同的是这一层有16个特征平面,那么16个特征平面是如何和上一层池化层是如何对应的呢?这里的16个特征平面是这样对应的,每个特征平面对应的卷积核,和池化层的多个平面进行卷积。这里把C3的卷积层特征平面编号即0,1,2,...,15,把池化层S2也编号为0,1,2,3,4,5.这两层具体如何对应呢?如下图

    上面说了,C3层和S2的对应关系和前面不一样,主要体现在C3的每一个特征平面是对应多个池化层的采样数据,如上图,横向的数表示卷积层C3的特征平面,纵向表示池化层的6个采样平面,我们以卷积层C3的第0号特征平面为例,它对应了池化层的前三个采样平面即0,1,2,三个平面使用的是三个卷积核(每个采样平面是卷积核相同,权值相等,大小为5x5),既然对应三个池化层平面,那么也就是说有5x5x3个连接到卷积层特征平面的一个神经元,因为池化层所有的样本均为14x14的,而卷积窗口为5x5的,因此卷积特征平面为10x10(大家可按照第一个卷积计算求的)。只是这里的卷积操作要更复杂,他不是所有的都是特征平面对应三个池化层平面,而是变化的,从上图我们可以清楚的看到前6个特征平面对应池化层的三个平面即0,1,2,3,4,5 , 而6~14每张特征平面对应4个卷积层,此时每个特征平面的一个神经元的连接数为5x5x4,最后一个特征平面是对应池化层所有的样本平面,这里大家好好理解。我们来计算一下连接数和待训练权值个数:

    连接数: (5x5x3+1)x10x10x6+(5x5x4+1)x10x10x9+(5x5x6+1)x10x10 = 45600+90900+15100=151600

    权值数: (5x5x3+1)x6 + (5x5x4+1)x9 + 5x5x6+1  = 456 + 909+151 = 1516

    这一层为什么要这样做呢?为什么不和前面的一样进行卷积呢?Lecon的论文说,主要是为了打破对称性,提取深层特征,因为特征不是对称的,因此需要打破这种对称,以提取到更重要的特征,这样设计的目的就是这个原因,大家好好体会,我们继续往下看。

    池化层(S4):

    这一层采样和前面的采样是一样的,使用的采样窗口为2x2的,对C3层进行采样,得到16个采样平面,此时的采样平面为5x5的,这里不细讲了,另外本层存在激活函数,为sigmod函数。大家上面理解的话,这里还是很简单的。我们继续看下一层:

    卷积层(C5):

    这一层还是卷积层,且这一层的特征平面有120个,每个特征平面是5x5的,而上一层的池化层S2只有16个平面且每个平面为5x5,本层使用的卷积核为5x5,因此和池化层正好匹配,那么怎么连接呢?很简单就是这里每个特征平面连接池化层的所有的采样层。这里称呼特征平面已经不合适了,因为每个卷积核只对应一个神经元了,因此本层只有120个神经元并列排列,每个神经元连接池化层的所有层。C5层的每个神经元的连接数为5x5x16+1,因此总共的连接数为:(5x5x16+1)x120=48120,而这一层的权值和连接数一样,因此也有48120个待训练权值。结合下面的图看:

    全连接层(F6):

    这一层其实就是BP网络的隐层,且为全连接层,即这一层有84个神经元,每一个神经元都和上一次的120个神经元相连接,那么连接数为(120+1)x84 = 10164,因为权值不共享,隐层权值数也是10164,至于为什么隐层是84个神经元稍后解释,本层的输出有激活函数,激活函数为双曲正切函数:                           

     根据论文解释:A的幅值,S是原点处的倾斜率,A的经验值是1.7159,原因没说。

    输出层:该层有十个神经元,可以理解这是对于手写体10个数,那个输出的数大,那个神经元代表的数字就是输出,下面我们看看他是和F6层是如何连接的,他不在是BP的神经输出层,而是基于径向基神经网络的输出层,径向基神经网络在上一节我们详细探讨了,上一节我们主要说了是关于高斯径向基,这里使用的是更简单的欧几里得径向基函数,如下:

    这公式是什么意思呢?

    首先大家应该明白什么是径向基神经网络,他基于距离进行衡量两个数据的相近程度的,RBF网最显著的特点是隐节点采用输人模式与中心向量的距离(如欧氏距离)作为函数的自变量,并使用径向基函数(如函数)作为激活函数。径向基函数关于N维空间的一个中心点具有径向对称性,而且神经元的输人离该中心点越远,神经元的激活程度就越低。上式是基于欧几里得距离,怎么理解那个式子呢?就是说F6层为84个输入用x_j表示,而输出有10个用y_i表示,而权值 使用w_{ji},上式说明所有输入和权值的距离平方和为依据判断,如果越相近距离越小,输出越小则去哪个,如果我们存储的到w_{ji}的值为标准的输出,如标准的手写体0,1,2,3等,那么最后一层就说明。F6层和标准的作比较,和标准的那个图形越相似就说明就越是那个字符的可能性更大。我们看看标准的是什么样的:

     这里标准的每个字符都是像素都是12x7=84.这就是解释了为什么F6层的神经元为84个,因为他要把所有像素点和标准的比较在进行判断,因此从这里也可以看出,这里不仅仅可以训练手写体数字,也可以识别其他字符,取决于w_{ji}和网络的设计,这些可以认为修改的。例如我们让他识别可打印的ASCII码,把小图片添加到这里就可以了,同时增加输出的神经元个数就可以完成了。再给出另外一个详细的图:

    到这里本节就结束了,下一节我们将解释该网络的学习过程和权值更新是如何进行的。

    展开全文
  • 卷积神经网络(一):LeNet5的基本结构

    万次阅读 多人点赞 2015-05-26 20:10:29
    卷积神经网络LeNet5的结构介绍。
  •   2019-01-22 07:12:38 经典网络(Classic networks) 这节课,我们来学习几个经典的神经网络结构,分别是LeNet-5、AlexNet和VGGNet。 ...LeNet-5 ...假设你有一张32×32×1的图片,LeNet-5可以识别...
  • LeNet神经网络由深度学习三巨头之一的Yan LeCun提出,他同时也是卷积神经网络 (CNN,Convolutional Neural Networks)之父。LeNet主要用来进行手写字符的识别与分类,并在美国的银行中投入了使用。LeNet的实现确立了...
  • 浅谈LeNet-5

    万次阅读 2020-08-15 10:22:03
    浅谈LeNet-5 一、LetNet是什么? LetNet是一种入门级的神经网络模型,是一个简单的卷积神经网络,可以用来做手写体识别。 下面我将以上图为例简单介绍一下LetNet神经网络的工作流程。 输入层 读入需要被...
  • CNN发展简史——LeNet(一)

    千次阅读 2020-07-17 18:33:23
    CNN简史 首先来回顾一下CNN发展的历史,为什么要做这个总结呢?除了加深我们对CNN框架的理解之外,沿着CNN发展的历史进程走一遍也是非常有趣的事。假如你不研究历史,你肯定不知道打火机居然早于火柴被发明,而ReLU...
  • LeNet-5神经网络的贡献:  1.这是一个比较早的网络模型,其中在卷积层后面加入池化层的思想先今还在使用。 2.在最后的卷积层接入池化层和全连接层在当前也比较常用。 出处:Gradient-Based Learning Applied to ...
  • Ubuntu 14.04 64位机上用Caffe+MNIST训练Lenet网络操作步骤
  • LeNet-5网络详解

    千次阅读 2017-01-13 20:39:08
    本文介绍一个经典的CNN模型:LeNet-5网络。 LeNet-5网络在MNIST数据集上的结果
  • DL之LeNet-5:LeNet-5算法的简介(论文介绍)、架构详解、案例应用等配图集合之详细攻略 目录 LeNet-5算法的简介(论文介绍) LeNet-5算法的架构详解 1、LeNet-5 结构分析 2、各层详细说明 3、以手写数字3为...
  • LeNet的C语言实现

    千次阅读 2017-04-16 22:26:45
    本程序是参考LeNet的网络结构,用C语言编写的, 不同的地方在于S4层以后,直接把S4的输出展开成一维数组,然后通过sigmod直接输出10个预测值,输出的误差值采用的是均方差。具体结构对比如下图。 LeNet网络结构: ...
  • LeNet的详细网络结构

    千次阅读 2018-06-19 15:13:03
    针对MNIST的LeNet结构如下图所示:包含2个卷积层,2个max池化层,2个全连接接层和1个relu层与一个softmax层。下面我来推导一下每层的神经元数目和参数的个数。1、输入层:输入层输入一个28*28的图片。2、卷积层1:该...
  • LeNet-5网络结构及训练参数计算

    千次阅读 2018-01-30 21:14:37
    经典神经网络诞生记:  1、LeNet,1998年 2、AlexNet,2012年 3、ZF-net,2013年 4、GoogleNet,...LeNet-5是由 Yann LeCun 等人于1998年提出的,是一个用于识别手写数字的网络,其网络结构图如下所示:
  • Keras实现LeNet-5网络
  • 作为一个刚接触神经网络的菜鸟,我在网上找了很多对卷积神经网络的解释但是最终感觉有些欠缺,于是我上GITHUB找到了一个Lenet5的matlab实现源代码,用大概一周的时间RTFSC,真心痛苦。于是我就决定发这样一些博客,...
  • 本文是对Yann Lecun大神的经典论文“Gradient-Based Learning Applied to Document Recognition”的阅读笔记之一,主要介绍LeNet的结构以及参数个数的计算,上一篇博客介绍的CNN设计原理。作者才疏学浅,还望指教。...
  • 动图详细讲解 LeNet-5 网络结构

    千次阅读 2020-06-01 10:54:58
    LeNet-5 动图详细讲解网络结构 LeNet-5 是 Yann LeCun 等人在1998年设计的用于手写数字识别的卷积神经网络,当年美国大多数银行就是用它来识别支票上面的手写数字的,它是早期卷积神经网络中最有代表性的实验系统之...
1 2 3 4 5 ... 20
收藏数 16,365
精华内容 6,546
关键字:

lenet