zoukankan      html  css  js  c++  java
  • 经典网络LeNet5看卷积神经网络各层的维度变化

      本文介绍以下几个CNN经典模型:Lenet(1986年)、Alexnet(2012年)、GoogleNet(2014年)、VGG(2014年)、Deep Residual Learning(2015年)

    1.LeNet-5

           Lenet-5是一个经典的CNN网络模型,几乎所有讲CNN的资料都会提到该模型;该模型是为了识别手写字体和计算机打印字符而设计的,

    而且该模型确实在手写体识别领域非常成功,曾被广泛应用于美国银行支票手写体识别。

    体的论文和例子可以参考:http://yann.lecun.com/exdb/lenet/index.html

    1)LeNet-5结构

     

     

    1.      输入层:N个32*32的训练样本

    输入图像为32*32大小。这要比Mnist数据库中最大的字母还大。这样做的原因是希望潜在的明显特征如

    笔画断点或角点能够出现在最高层特征监测子感受野的中心。

    2.      C1层:

    输入图片大小:      32*32

    卷积窗大小:          5*5

    卷积窗种类:          6

    输出特征图数量:  6

    输出特征图大小:  28*28        (32-5+1)

    神经元数量:          4707          (28*28)*6)

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

    可训练参数:          156              5*5*6+6

    用6个5×5的过滤器进行卷积,结果是在卷积层C1中,得到6张特征图,特征图的每个神经元与输入图片中的5×5的邻域相连,

    即用5×5的卷积核去卷积输入层,由卷积运算可得C1层输出的特征图大小为(32-5+1)×(32-5+1)=28×28。

    3.      S2层:

    输入图片大小:       (28*28)*6

    卷积窗大小:           2*2

    卷积窗种类:           6

    输出下采样图数量:6

    输出下采样图大小:14*14      (28/2)*(28/2)

    神经元数量:           1176         (14*14)*6

    连接数:                     5880        2*2*14*14*6+14*14*6

    可训练参数:          12               1*6+6

    卷积和子采样过程:

    (1)、卷积过程包括:用一个可训练的滤波器fx去卷积一个输入的图像(第一阶段是输入的图像,后面的阶段就是卷积特征map了),

    然后加一个偏置bx,得到卷积层Cx卷积运算一个重要的特点就是,通过卷积运算,可以使原信号特征增强,并且降低噪音。

    (2)、子采样过程包括:每邻域四个像素求和变为一个像素,然后通过标量Wx+1加权,再增加偏置bx+1,然后通过一个sigmoid激活函数,

    产生一个大概缩小四倍的特征映射图Sx+1利用图像局部相关性的原理,对图像进行子抽样,可以减少数据处理量同时保留有用信息。

    卷积之后进行子抽样的思想是受到动物视觉系统中的“简单的”细胞后面跟着“复杂的”细胞的想法的启发而产生的。

    降采样后,降采样层S2的输出特征图大小为(28÷2)×(28÷2)=14×14。

    S2层每个单元的4个输入相加,乘以一个可训练参数,再加上一个可训练偏置。结果通过sigmoid函数计算。

    可训练系数和偏置控制着sigmoid函数的非线性程度。如果系数比较小,那么运算近似于线性运算,下采样相当于模糊图像。

    如果系数比较大,根据偏置的大小下采样可以被看成是有噪声的“或”运算或者有噪声的“与”运算。

    每个单元的2*2感受野并不重叠,因此S2中每个特征图的大小是C1中特征图大小的1/4(行和列各1/2)。

    从一个平面到下一个平面的映射可以看作是作卷积运算,S-层可看作是模糊滤波器,起到二次特征提取的作用。

    隐层与隐层之间空间分辨率递减,而每层所含的平面数递增,这样可用于检测更多的特征信息。

    4.      C3层:

    输入图片大小:      (14*14)*6

    卷积窗大小:          5*5

    卷积窗种类:          16

    输出特征图数量:  16

    输出特征图大小:  10*10             (14-5+1)

    神经元数量:          1600               (10*10)*16)

    连接数:                  151600          1516*10*10

    可训练参数:          1516               6*(3*25+1)+6*(4*25+1)+3*(4*25+1)+1*(6*25+1)

    C3层也是一个卷积层,它同样通过5x5的卷积核去卷积S2层,然后得到的特征map就只有10x10个神经元,

    但是它有16种不同的卷积核,所以就存在16个特征map了。这里需要注意的一点是:

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

    的不同组合(这个做法也并不是唯一的)。

    C3中每个特征图由S2中所有6个或者几个特征map组合而成。为什么不把S2中的每个特征图连接到每个C3的特征图呢?

    原因有2点。第一,不完全的连接机制将连接的数量保持在合理的范围内。第二,也是最重要的,其破坏了网络的对称性。

    由于不同的特征图有不同的输入,所以迫使他们抽取不同的特征。

    5.      S4层:

    输入图片大小:          (10*10)*16

    卷积窗大小:               2*2

    卷积窗种类:               16

    输出下采样图数量:   16

    输出下采样图大小:   (5*5)*16

    神经元数量:               400                            (5*5)*16

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

    可训练参数:                32                              (1+1)*16

    S4层是一个下采样层,由16个5*5大小的特征图构成。特征图中的每个单元与C3中相应特征图的2*2邻域相连接,

    跟C1和S2之间的连接一样。S4层有32个可训练参数(每个特征图1个因子和一个偏置)和2000个连接。

    6.      C5层:

    输入图片大小:       (5*5)*16

    卷积窗大小:           5*5

    卷积窗种类:           120

    输出特征图数量:   120

    输出特征图大小:   1*1                 (5-5+1)

    神经元数量:           120                 (1*120)

    连接数:                   48120             5*5*16*120*1+120*1

    可训练参数:           48120             5*5*16*120+120

    C5层是一个卷积层,有120个特征图。每个单元与S4层的全部16个单元的5*5邻域相连。由于S4层特征图的大小也为5*5(同滤波器一样)

    故C5特征图的大小为1*1,这构成了S4和C5之间的全连接。之所以仍将C5标示为卷积层而非全相联层,是因为如果LeNet-5的输入变大,

    而其他的保持不变,那么此时特征图的维数就会比1*1大。C5层有48120个可训练连接。

    7.      F6层:

    输入图片大小:         (1*1)*120

    卷积窗大小:            1*1

    卷积窗种类:             84

    输出特征图数量:    1

    输出特征图大小:    84      

    神经元数量:             84   

    连接数:                     10164        120*84+84

    可训练参数:             10164        120*84+84

    F6层有84个单元(之所以选这个数字的原因来自于输出层的设计),与C5层全相连。有10164个可训练参数。如同经典神经网络,

    F6层计算输入向量和权重向量之间的点积,再加上一个偏置。然后将其传递给sigmoid函数产生单元i的一个状态。

    8.      OUTPUT层:

    输入图片大小:       1*84

    输出特征图数量:   1*10

    最后,输出层由欧式径向基函数(EuclideanRadial Basis Function)单元组成,每类一个单元,每个有84个输入。换句话说,

    每个输出RBF单元计算输入向量和参数向量之间的欧式距离。输入离参数向量越远,RBF输出的越大。一个RBF输出可以被理解为衡

    量输入模式和与RBF相关联类的一个模型的匹配程度的惩罚项。用概率术语来说,RBF输出可以被理解为F6层配置空间的高斯分布

    的负log-likelihood。给定一个输入模式,损失函数应能使得F6的配置与RBF参数向量(即模式的期望分类)足够接近。这些单元的参

    数是人工选取并保持固定的(至少初始时候如此)。这些参数向量的成分被设为-1或1。虽然这些参数可以以-1和1等概率的方式任选,

    或者构成一个纠错码,但是被设计成一个相应字符类的7*12大小(即84)的格式化图片。这种表示对识别单独的数字不是很有用,

    但是对识别可打印ASCII集中的字符串很有用。

    使用这种分布编码而非更常用的“1 of N”编码用于产生输出的另一个原因是,当类别比较大的时候,非分布编码的效果比较差。原因

    是大多数时间非分布编码的输出必须为0。这使得用sigmoid单元很难实现。另一个原因是分类器不仅用于识别字母,也用于拒绝非

    字母。使用分布编码的RBF更适合该目标。因为与sigmoid不同,他们在输入空间的较好限制的区域内兴奋,而非典型模式更容易落到外边。

    RBF参数向量起着F6层目标向量的角色。需要指出这些向量的成分是+1或-1,这正好在F6 sigmoid的范围内,因此可以防止sigmoid

    函数饱和。实际上,+1和-1是sigmoid函数的最大弯曲的点处。这使得F6单元运行在最大非线性范围内。必须避免sigmoid函数的饱和,

    因为这将会导致损失函数较慢的收敛和病态问题。

  • 相关阅读:
    -bash: fork: Cannot allocate memory 问题的处理
    Docker top 命令
    docker常见问题修复方法
    The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)
    What's the difference between encoding and charset?
    hexcode of é î Latin-1 Supplement
    炉石Advanced rulebook
    炉石bug反馈
    Sidecar pattern
    SQL JOIN
  • 原文地址:https://www.cnblogs.com/byteHuang/p/7310575.html
Copyright © 2011-2022 走看看