10.5 一个完整的卷积神经网络

之前我们学过了全连接层、卷积层、池化层,这一节我们就把这些模块组合起来实现一个完整的卷积神经网络( Convolutional Neural Network,CNN)。

10.5.1 如何进行图像分类

之前我们讲了卷积层和池化层,它们的输出都是带有空间位置信息的特征图,但是这些特征信息如何用来进行图像分类呢?

在进行了足够的卷积层后,得到的特征图都是具有概括性的高级特征了。我们只需要把多通道的高级特征图展开,连成一个一维向量,后边再接全连接层进行分类就可以了。

想想我们之前用全连接神经网络进行手写数字识别。因为每个图片只有一个数字,并且数字居中。没有利用到局部性和平移不变性,所以全连接网络就可以很好的识别。现在有了卷积层提取高级特征,后边用全连接层在高级特征(而不是像素值)上进行分类任务,在更通用的图像分类任务上会取得更好的效果。

10.5.2 各个模块的作用

卷积层

一个卷积层由多个Filter构成,每个Filter利用图像问题的局部性和平移不变性,用滑动窗口对局部多通道特征进行融合计算,输出一个新的特征。每个Filter输出的新特征构成一个通道。多个Filter构成多个通道。

激活函数

卷积层输出的特征需要经过激活函数来进行激活,带来非线性。最常使用的激活函数就是ReLU。

池化层

一个或者多个卷积层后,一般会通过一个最大池化层来提取最强特征,抑制其他特征。并且缩小特征图尺寸,缩写特征图的操作也被叫做下采样(Subsampling)。

Flatten

将特征图展平为一维向量

全连接层

卷积操作完成后,最后用全连接进行汇总,完成分类/回归任务。

Dropout

防止过拟合,一般应用在全连接层,如果你要应用在卷积层输出的特征图,注意需要将多个通道的同一位置一起丢弃(Spatial Dropout)。

10.5.3 组合多个模块

假设我们输入的还是之前手写数字识别的28x28的灰度图像。

  • 输入:28x28x1
  • C1,卷积层:8个3x3的卷积核,Padding=1,Stride=1,输出28x28x8的特征图。ReLU激活。
  • P2,最大池化层:池化核2x2,步长为2,输出为14x14x8的特征图。
  • C3,卷积层:16个3x3的卷积核,Padding=1,Stride=1,输出14x14x16的特征图。ReLU激活。
  • P4,最大池化层,池化核2x2,步长为2,输出为7x7x16的特征图。
  • C5,卷积层:32个3x3的卷积核,Padding=0,Stride=1,输出5x5x32的特征图。ReLU激活。Flatten展开为1x800的特征。
  • F6,全连接层:800x64,ReLU激活。
  • 输出层,64x10,Softmax。

接下来我们计算一下每层的参数: 对于C1层,每个Filter的参数等于卷积核的3x3x1,其中1是输入通道数。加上bias的一个参数,一共10个参数,8个Filter,一共80个参数。

池化层没有参数。

C3层,每个Filter的参数等于卷积核的3x3x8,其中8是输入通道数。加上bias的一个参数,一共73个参数,16个Filter,一共1168个参数。

C5层,每个Filter的参数为(3x3x16+1)x32=4640个参数。

F6层,800x64+64=51264个参数。

输出层,64x10+10=650个参数。

参数量
C1 80
C3 1168
C5 4640
F6 51264
输出层 650

可以看到参数量最大的就是全连接层,它占了所有参数的88%。

10.5.4 网络结构图

1023.png

通过观察上边的网络结构图,可以发现随着网络深度的增加,特征图的尺寸在逐渐缩小,通道数在逐步增加。以人脸识别为例,浅层每个特征的感受野小,每个通道需要更多的特征去编码一些低级的局部特征(边缘,纹理)。深层随着每个特征感受野的增加,一个通道只需要少量的特征就可以编码更高级的全局语义(五官,表情)。通道数的增加使得网络可以学到更多的潜在高级特征。比如:微笑的眼睛,生气的嘴巴等。

换句话说,低级特征数量少,对位置敏感,所以需要更大的特征图来精确定位位置,但是通道数少。高级全局特征数量多,对位置不那么敏感,所以通道数多,特征图尺寸小。

results matching ""

    No results matching ""