深度学习基础篇之卷积神经网络(CNN)

一、CNN的基本结构

首先我们来看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的矩阵。这里我们假设卷积核每次移动一格,具体的卷积过程如下:

  1. 计算输入层左上角2*2局部和卷积核的卷积,也就是各个位置的元素相乘再相加,得到输出矩阵S的 S 00 S_{00} S00的值,即 a ω + b x + e y + f z a\omega + bx +ey + fz +bx+ey+fz
  2. 将输入的局部向右平移一格,现在是 ( b , c , f , g ) (b, c, f, g) (b,c,f,g)四个元素与卷积核的卷积,这样得到了输出矩阵S的 S 01 S_{01} S01的值。
  3. 将这个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的矩阵。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值