【深度学习】卷积神经网络的卷积层和池化层计算

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Daycym/article/details/83825689

一、简介

\quad\quad 卷积神经网络(Convolutional neural network, CNN),属于人工神经网络的一种,被应用于图像识别、语音识别等各种场合。

\quad\quad 我们知道,神经网络的基本组成包括输入层、隐藏层、输出层。卷积神经网络的特点就在于隐藏层分为卷积层和池化层。

  • 卷积层,通过一块卷积核在原始图像上平移来提取特征,每一个特征就是一个特征映射;
  • 池化层,通过汇聚特征后稀疏参数来减少要学习的参数,降低网络的复杂度,常见的包括:最大值池化和平均值池化

下面我们先来看看卷积神经网络的整体结构

二、整体结构

1、根据 这篇博客 我们可以简单画出神经网络的结构图:

在这里插入图片描述

图中有多个“Affine-ReLU”组合,最后一层是“Affine-Softmax”组合,通过Softmax输出最终结果(概率)

2、CNN的结构图

在这里插入图片描述

比较上面两张图,我们可以发现,CNN中新增加了Convlution层和Pooling层,CNN的层的连接顺序是“Conv-ReLU-(Pool)”,(Pooling层有时会被省略)

三、卷积层

在神经网络中,我们使用全连接层(Affine),相邻层的神经元全部连接在一起,输出的数量可以任意决定。

那么为什么要将全连接层换成卷积层呢?

因为,全连接层将数据的形状给“忽略”了,使用神经网络来训练MNIST数据,输入数据是图像,三维形状(1,28,28)表示(通道,高,长),输入的数据是将三维数据拉平为一维数据,以784个数据的形式输入到最开始的全连接层。

但是,这个忽略了图像三维形状中包含的空间信息,比如,空间上邻近的像素为相似的值、RGB的各个通道之间也存在密切的关联性,所以使用全连接无法利用与形状相关的信息。

使用卷积层,可以保持图像数据的形状不变,输入图像数据时,卷积层会以三维数据的形式接收输入数据,并且同样以三维数据输出至下一层

1、卷积运算

卷积运算 动画演示

在这里插入图片描述

  • 卷积层进行的处理就是卷积运算,也相当于图像处理中的“滤波器运算”

在这里插入图片描述

上图是单通道的运算,卷积运算在输入数据中以一定间隔滑动卷积核的窗口并运算(相应元素相乘在求和),然后将结果输出到对应的位置,将这个过程在所有位置都进行一遍,便可以得到卷积运算的结果。

在全连接的神经网络中,除了权重,还存在偏置。CNN中,卷积核的参数对应之前的权重,并且CNN也存在偏置,卷积运算后得到结果的每个元素都加上偏置,如下图:

在这里插入图片描述

四、填充、步幅

- 填充

1、填充

  • 在进行卷积层处理之前,向输入数据的周围填入固定的值(比如0)
  • 图中,原图像数据形状为(5,5),通过填充,输入数据变成了(7,7),然后应用大小为(3,3)的卷积核,生成了(3,3)的输出数据,这里步幅设置为2
  • 使用填充主要是为了调整输出的大小,因为每次进行卷积都会缩小空间,那么在多次卷积后大小可能为1,导致无法继续在应用卷积运算
  • 卷积运算可以保持空间大小不变的情况下将数据传递给下一层

2、步幅

  • 步幅是指应用卷积核的间隔,动画演示中的步幅为2
  • 对于输入大小为(7,7)的数据,以步幅为2应用卷积核,输出大小为(3,3)
  • 如果设置为1,输出大小为(5,5)

综上,增大步幅后,输出大小会变小;增大填充后,输出大小会变大

设输入大小为(H,W),卷积核大小为(FH,FW),输出大小为(OH,OW),填充为P,步幅为S,此时:

O H = H + 2 P F H S + 1 OH = \frac{H + 2P - FH}{S} + 1
O W = H + 2 P F W S + 1 OW = \frac{H + 2P - FW}{S} + 1

五、三维数据的卷积

上面的动画演示的就是三维数据的卷积运算,图像数据除了高、长方向之外,还需要处理通道方向。

  • 在三维数据的卷积中,输入数据和卷积核的通道数要设为相同的值,动画演示中均为3;
  • 卷积核的大小可以设置为任意值,但是每个卷积核的大小也必须相同

通道方向上有多个特征图时,会按通道进行输入数据和卷积核的卷积运算,并将结果相加,从而得到结果

在这里插入图片描述

六、池化层

在这里插入图片描述

上图为“Max池化”最大值池化,是获取最大值的运算,在“2 × 2”的目标区域内取最大值;
平均值池化,就是在目标区域中计算平均值

  • 池化层和卷积层不同,没用要学习的参数,只是从目标区域中取最大值(平均值)
  • 池化层中数据数据和输出数据的通道数不会发生变化,计算是按通道独立进行的
  • 池化层对微小的位置变化具有鲁棒性

猜你喜欢

转载自blog.csdn.net/Daycym/article/details/83825689