一、CNN的基本结构
首先我们来看CNN的解百纳结构,一个常见的图像识别CNN模型如下图:

从图中可以看出最左边的图像就是模型的输入层,在计算机中就是若干个矩阵,这点与DNN类似。
接着是卷积层(Convolution Layer),这个层是CNN特有的,卷积层的激活函数是ReLU,该函数其实很简单,公式为: R e L U ( x ) = m a x ( 0 , x ) ReLU(x) = max(0, x) ReLU(x)=max(0,x)。在卷积层后面是池化层(Pooling Layer),这也是CNN特有的网络结构,池化层是没有激活函数的。
卷积层+池化层的组合可以在隐藏层中出现多次,在上图的结构中出现了两次。实际上他们出现的次数可以根据模型的需要调整。当然我们也可以灵活搭配各种结构,如卷积层+卷积层、卷积层+卷积层+池化层,这些在构建模型时没有限制。但是最常见的CNN结构是若干卷积层+池化层的组合。
在若干卷积层+池化层后面是全连接层(Fully Connected Layer,简称FC),全连接层实际上就是DNN的结构,输出层采用的是Softmax层做图像的分类。
从CNN的结构可以看出,CNN相对于DNN,比较特殊的就是卷积层和池化层,只要把卷积层和池化层的原理搞清楚,那么搞清楚CNN就很容易了。
二、CNN的卷积层
举个例子如下,图中的输入是一个二维的34的矩阵,卷积核是一个22的矩阵。这里我们假设卷积核每次移动一格,具体的卷积过程如下:
- 计算输入层左上角2*2局部和卷积核的卷积,也就是各个位置的元素相乘再相加,得到输出矩阵S的 S 00 S_{00} S00的值,即 a ω + b x + e y + f z a\omega + bx +ey + fz aω+bx+ey+fz
- 将输入的局部向右平移一格,现在是 ( b , c , f , g ) (b, c, f, g) (b,c,f,g)四个元素与卷积核的卷积,这样得到了输出矩阵S的 S 01 S_{01} S01的值。
- 将这个22的矩阵在输入矩阵上遍历后,就能得到输出矩阵S的结果,S是一个二维的23矩阵。

上面的例子是二维的输入,卷积的过程比较简单,那么如果输入是多维的呢?比如输入是一个335(3代表彩色图像的RGB三个色道)的矩阵,那么我们该如何取卷积呢?
在斯坦福大学的csn231n的课程上,有一个动态的例子,三维向量的卷积动态图,可以参照动态来理解。
三、CNN中的池化层
相比卷积层的复杂,池化层要简单的多,所谓的池化,就是对输入张量的各个子矩阵进行压缩。假如是22的池化,就是将子矩阵的每22个元素变成一个元素;如果是33的池化,那么将子矩阵的每33个元素变成一个元素,这样输入矩阵的维度就变小了。
要想将输入子矩阵的每n*n个元素变成一个元素,那么需要有一个池化标准。常见的池化标准有2个,MAX和Average,即取限定区域内的最大值或均值作为池化后的元素值。
下面的例子采用取最大值的池化方法,采用的池化大小是2*2,步幅是2
首先对红色22区域进行池化,由于此22区域的最大值是6,那么对应的池化位置输出值也就是6,由于步幅是2,此时移动到绿色的位置进行池化,输出的最大值是8,最终,我们的输入44的矩阵在池化后变成了22的矩阵。

&spm=1001.2101.3001.5002&articleId=130661137&d=1&t=3&u=90eaa200e90a4a82992d6f180ebfc3b1)
554

被折叠的 条评论
为什么被折叠?



