卷积神经网络CNN

本文参考:
《深度学习入门:基于Python的理论与实现》

卷积神经网络CNN

既然已经有全连接层能搭建神经网络了,那为什么还有卷积神经网络呢?
因为全连接层会将数据的形状“忽视”。比如,输入的数据是图像的时候,图像通常是高、长、通道方向上的三维形状,但是,向全连接层中输入时,需要将3维的数据拉平为1维的数据。
图像是3维形状,这个形状中含有重要的空间信息。比如,空间上相邻像素为相似的值、RGB各个通道之间分别由密切的关联性、相距较远的像素之间没有什么关联等。3维形状中可能隐藏有值得提取的本质模式。但是,全连接层会忽视形状,将全部的输入数据作为相同的神经元处理,无法利用与形状相关的信息。

卷积层

卷积运算

卷积运算

如图所示,输入的特征图的大小为4×4,滤波器(也称卷积核)的大小为3×3,输出特征图的大小为2×2
对于输入数据,卷积运算以一定间隔滑动滤波器的窗口并应用,这里的滤波器是指图中灰色的3×3的部分,将各个位置上滤波器的元素与输入的对应元素相乘然后求和,将这个结果保存到输出的对应位置,就可以得到卷积运算的输出。
如图所示,输出特征图中的15=1×2+2×0+3×1+0×0+1×1+2×2+3×1+0×0+1×2

在CNN中,滤波器的参数类似于全连接层的权重,且CNN中也同样存在偏置。偏置一般只有1个1×1,这个值会被累加到应用了滤波器的所有元素上。
偏置

padding

在进行卷积层的处理之前,有时候要向输入数据的周围填入固定的数据(比如0等),这称为填充(padding)。
padding
如图所示,经过填充之后,大小为4×4的输入数据变为了6×6的形状。在填充时,我们会向输入数据的周围填入0(图中用虚线表示填充,并省略了填充的内容“0”)。在这个例子中,padding的值为1,也可以将padding的值设置为2、3等任意的整数,如果将padding设为2,则输入数据的大小将会变成8×8。
使用填充的目的主要是为了调整输出的大小。因为如果每次进行卷积运算都缩小空间,那么在某个时刻输出大小就有可能变为1,导致无法再应用卷积运算。

stride

stride
在图中,堆输入大小为7×7的数据,以步幅(stride)为2应用了滤波器。通过将步幅设为2,输出大小变为3×3,像这样,步幅可以指定应用滤波器的间隔

综上,增大步幅后,输出大小会变小。而增大填充后,输出大小会变大。如果将这样的关系写成算式,会如何呢?接下来,我们看一下对于填充和步幅,如何计算输出大小。
假设输入大小为(H,W),滤波器大小为(FH,FW),输出大小为(OH,OW),padding为P,stride为S,则有:
输出计算公式
例:输入大小:(4,4);padding:1;stride:1;滤波器大小:(3,3)
则:
计算

3维数据的卷积运算

之前的卷积运算的例子都是以有高、长方向的2维形状为对象的。但是,图像是3维数据,除了高、长方向之外,还需要处理通道方向。这里,我们按照与之前相同的顺序,看一下对加上了通道方向的3维数据进行卷积运算的例子。
3维卷积运算

当通道方向上有多个特征图时,会按照通道进行输入数据和滤波器的卷积运算,并将结果相加,从而得到输出。
需要注意的是,在3维数据的卷积运算中,输入数据和滤波器的通道数要设置为相同的值

将数据和滤波器结合长方体的方块来考虑:
长方体
在这个例子中,输出数据是1张特征图。所谓的1张特征图,换句话说就是通道数为1的特征图。那么,如果要在通道方向上也拥有多个卷积运算的输出,该怎么做呢?为此,就需要用到多个滤波器
多个滤波器输出
通过应用FN个滤波器,输出特征图也生成了FN个。如果将这FN个特征图汇集在一起,就得到了形状为(FN,OH,OW)的方块。将这个方块传递给下一层,就是CNN的处理流。

在3维的卷积运算中也存在着偏置。如图所示,每个通道只有一个偏置,这里偏置的形状是(FN,1,1),它与滤波器相加时,要对滤波器的输出结果(FN,OH,OW)按通道加上相同的偏置值。
3维偏置

批处理

神经网络的处理中进行了将输入数据打包的批处理。之前的全连接神经网络的实现也对应了批处理,通过批处理,能够实现处理的高效化和学习时对mini-batch的对应。
在卷积神经网络(CNN)中,也同样可以应用批处理。为此,需要将在各层间传递的数据保存为4维数据,即(batch_num,channel,height,width)。
批处理
如图所示,在各个数据的开头添加了批用的维度。在网络间传递的是4维的数据,对这N个数据进行了卷积运算,相当于批处理将N次的处理汇总成了1次进行。

池化层

池化是缩小高、长方向上的空间的运算。
池化
如图所示是按步幅为2进行2×2的Max池化时的处理顺序。一般来说,池化的窗口大小会和步幅设定成相同的值。除了Max池化之外,还有Average池化等。相对于Max池化是从目标区域中取出最大值,Average池化则是计算目标区域的平均值。在图像识别领域,主要使用Max池化。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值