理解卷积神经网络的卷积计算

引言

相信刚学卷积神经网络的人来说,要理解卷积神经网络是一件不容易的事情,我们先来看看卷积神经网络中要知道的卷积计算

卷积神经网络结构

一个卷积神经网络里包括5个部分——输入层、若干卷积操作和池化层结合的部分、全局平均池化层、输出层:

  • 输入层:将每个像素代表一个特征节点输入网络。
  • 卷积操作部分:由多个滤波器组合的卷积层
  • 池化层:将卷积结果降维
  • 全局平均池化层:对生成的 feature map 取全局平均值
  • 输出层:需要分成几类,相应的就会有几个输出节点。每个输出节点都代表当前样本属于该类型的概率。

padding规则

padding 属性的意义是定义元素框与元素内容之间的空间。
为了方便解释,我们先定义几个变量

  • 输入的尺寸中高和宽定义成 in_height、in_width。
  • 卷积核的高和宽定义成 filter_height、filter_width。
  • 输出的尺寸中高和宽定义成 output_height、output_width。
  • 步长的高宽方向定义成 strides_height、strides_width。

1. VALID情况

输出宽和高的公式表示如下:
output_width = (in_width-filter_width + 1) / strides_width (结果向上取整)
output_height = (in_height-filter_height + 1) / strides_height(结果向上取整)

2. SAME情况

输出的宽和高将与卷积核没有关系,具体公式表示如下:
output_width = (in_width-filter_width + 1) / strides_width (结果向上取整)
output_height = (in_height-filter_height + 1) / strides_height(结果向上取整)
\color{red}{注意}:补零规则
pad_height = max((output_height-1) x strides_height +filter_height-in_height, 0)
pad_width = max((output_width-1) x strides_width +filter_height-in_width, 0)
pad_top = pad_height / 2
pad_bottom = pad_height - pad_top
pad_left = pad_width / 2
pad_right = pad_width - pad_left
上面公式表示中:

  • pad_height:代表高度方向要填充 0 的行列
  • pad_width:代表宽度方向要填充 0 的列数
  • pad_top、pad_bottom、pad_left、pad_right:分别代表上、下、左、右这四个方向填充0的行、列数。

3.举例

假设用‘一个一维数据来举例,输入是 13,filter是 6,步长是 5,对于 padding 的取值有如下表示:
“VALID"相当于 padding,生成的宽度为 (13-6+1)/ 5 = 2 (向上取整)个数字。
inputs: 理解卷积神经网络的卷积计算
”SAME“=相当于 padding,生成的宽度为 13/5 = 3(向上取整)个数字
Padding 的方式可以如下计算:
Pad_width = (3-1) x 5+6-13 = 3
Pad_left = Pad_width / 2 = 3/2 = 1
Pad_right = pad_width - pad_left = 2

在左边补 1 个0,右边补 2 个0。
理解卷积神经网络的卷积计算

相关词汇

filter = 卷积核
feature map = 卷积之后得到的输出结果
感受野 = 网络内部的不同位置的神经元对原图像的感受范围的大小,即filter尺寸大小

卷积有什么作用?

减少参数量,提取数据的重要特征,卷积的方式就可以看作是一个映射的过程。