引言
相信刚学卷积神经网络的人来说,要理解卷积神经网络是一件不容易的事情,我们先来看看卷积神经网络中要知道的卷积计算
相关词汇
filter = 卷积核
feature map = 卷积之后得到的输出结果
感受野(Receptive Field) = 卷积神经网络各输出层每个像素点在原始图像上的映射区域大小
两层 33 卷积操作的有效区域(感受野)是55 (所有filter的stride=1,pad=0),示意图如下:
卷积过程
如上图是一个6x6的输入和一个3x3的卷积核以步长为1进行卷积。
卷积神经网络结构
一个卷积神经网络里包括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(结果向上取整):补零规则
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。
卷积有什么作用?
减少参数量,提取数据的重要特征,卷积的方式就可以看作是一个映射的过程。