卷积神经网络(一)-LeNet

卷积神经网络(一)-LeNet

卷积神经网络(二)-AlexNet

 卷积神经网络(三)-ZF-Net和VGG-Nets

卷积神经网络(四)-GoogLeNet

卷积神经网络(五)-ResNet

卷积神经网络(六)-DenseNet


CNN从90年代的LeNet开始,21世纪初沉寂了10年,直到12年AlexNet开始又再焕发第二春,从ZF Net到VGG,GoogLeNet再到ResNet和最近的DenseNet,网络越来越深,架构越来越复杂,解决反向传播时梯度消失的方法也越来越巧妙。

将会谈到以下经典的卷积神经网络:

  1. LeNet
  2. AlexNet
  3. ZF
  4. VGG
  5. GoogLeNet
  6. ResNet
  7. DenseNet

LeNet

闪光点:定义了CNN的基本组件,是CNN的鼻祖。

LeNet是卷积神经网络的祖师爷LeCun在1998年提出,用于解决手写数字识别的视觉任务。自那时起,CNN的最基本的架构就定下来了:卷积层、池化层、全连接层。如今各大深度学习框架中所使用的LeNet都是简化改进过的LeNet-5(-5表示具有5个层),和原始的LeNet有些许不同,比如把激活函数改为了现在很常用的ReLu。

LeNet-5跟现有的conv->pool->ReLU的套路不同,它使用的方式是conv1->pool->conv2->pool2再接全连接层,但是不变的是,卷积层后紧接池化层的模式依旧不变。

以上图为例,对经典的LeNet-5做深入分析:

  1. 首先输入图像是单通道的32*32大小的图像,用矩阵表示就是[1,32,32],传统上,不将输入层视为网络层次结构之一。
  2. C1层-卷积层
    1.    输入图片:32*32,
    2.   卷积核大小:5*5,
    3. 卷积核种类:6,
    4. 输出featuremap大小:28*28 :(32-5+1)=28
    5. 神经元数量:28*28*6
    6. 可训练参数:(5*5+1) * 6(每个滤波器5*5=25个unit参数和一个bias参数,一共6个滤波器)
    7. 连接数:(5*5+1)*6*28*28=122304
    8. 详细说明:对输入图像进行第一次卷积运算(使用 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层-池化层(下采样层)
    1.  输入:28*28
    2.   采样区域:2*2
    3. 采样方式:4个输入相加,乘以一个可训练参数,再加上一个可训练偏置。结果通过sigmoid
    4.  采样种类:6
    5.   输出featureMap大小:14*14(28/2)
    6. 神经元数量:14*14*6
    7.   可训练参数:2*6(和的权+偏置)
    8.    连接数:(2*2+1)*6*14*14
    9.   S2中每个特征图的大小是C1中特征图大小的1/4。
    10.  详细说明:第一次卷积之后紧接着就是池化运算,使用 2*2核 进行池化,于是得到了S2,6个14*14的 特征图(28/2=14)。S2这个pooling层是对C1中的2*2区域内的像素求和乘以一个权值系数再加上一个偏置,然后将这个结果再做一次映射。于是每个池化核有两个训练参数,所以共有2x6=12个训练参数,但是有5x14x14x6=5880个连接。
  4. C3层-卷积层

    1.   输入:S2中所有6个或者几个特征map组合
    2. 卷积核大小:5*5
    3.   卷积核种类:16
    4. 输出featureMap大小:10*10 (14-5+1)=10
    5. C3中的每个特征map是连接到S2中的所有6个或者几个特征map的,表示本层的特征map是上一层提取到的特征map的不同组合。
    6.   存在的一个方式是: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个特征图。具体如下:

    7. ç½ç»è§£æï¼ä¸ï¼ï¼LeNet-5详解

  5. 第二个池化层pool2核尺寸为2*2,步长2,这是没有重叠的max pooling,池化操作后,图像尺寸减半,变为4×4,输出矩阵为[50,4,4]。
  6. pool2后面接全连接层fc1,神经元数目为500,再接relu激活函数。
  7. 再接fc2,神经元个数为10,得到10维的特征向量,用于10个数字的分类训练,送入softmaxt分类,得到分类结果的概率output。

LeNet的Keras实现

def LeNet():
    model = Sequential()
    model.add(Conv2D(32,(5,5),strides=(1,1),input_shape=(28,28,1),padding='valid',activation='relu',kernel_initializer='uniform'))
    model.add(MaxPooling2D(pool_size=(2,2)))
    model.add(Conv2D(64,(5,5),strides=(1,1),padding='valid',activation='relu',kernel_initializer='uniform'))
    model.add(MaxPooling2D(pool_size=(2,2)))
    model.add(Flatten())
    model.add(Dense(100,activation='relu'))
    model.add(Dense(10,activation='softmax'))
    return model

参考:https://www.cnblogs.com/skyfsm/p/8451834.html

你可能感兴趣的:(#,深度学习)