7.1整体结构
之前介绍的神经网络中,相邻层的所有神经元之间都有连接,这称为全连接
CNN 中新增了 Convolution 层 和 Pooling 层
7.2卷积层
全连接层存在的问题:数据的形状被“忽视”了
比如,输入数据是图像时,图像通常是高、长、通道方向上的3维形状。但是,向全连接层输入时,需要将3维数据拉平为1维数据
图像是3维形状,这个形状中应该含有重要的空间信息,但是,因为全连接层会忽视形状,将全部的输入数据作为相同的神经元(同一维度的神经元)处理,所以无法利用与形状相关的信息。
而卷积层可以保持形状不变。当输入数据是图像时,卷积层会以3维数据的形式接收输入数据,并同样以3维数据的形式输出至下一层。因此,在CNN中,可以(有可能)正确理解图像等具有形状的数据。 将卷积层的输入输出数据称为特征图
7.2.2卷积运算
卷积运算相当于图像处理中的“滤波器运算”,对于输入数据,卷积运算以一定间隔滑动滤波器的窗口并应用。将各个位置上滤波器的元素和输入的对应元素相乘,然后再求和。将这个结果保存到输出的对应位置。向应用了滤波器的数据加上了偏置,这个值会被加到应用了滤波器的所有元素上
7.2.3填充
在进行卷积层的处理之前,有时要向输入数据的周围填入固定的数据,这称为填充
可以设置填充的大小,这里为1,大小为(4,4)的输入变成了(6,6)
使用填充主要是为了调整输出的大小,因为如果每次进行卷积运算都会缩小空间,那么在某个时刻输出大小就有可能变为 1,导致无法再应用卷积运算。
7.2.4步幅
应用滤波器的位置间隔称为步幅
综上,增大步幅后,输出大小会变小。而增大填充后,输出大小会变大。
如何计算输出大小?
7.2.5 3维数据的卷积运算
之前的卷积运算的例子都是以有高、长方向的2维形状为对象的。但是,图像是3维数据,除了高、长方向之外,还需要处理通道方向。通道方向上有多个特征图时,会按通道进行输入数据和滤波器的卷积运算,并将结果相加,从而得到输出。 通道数只能设定为和输入数据的通道数相同的值
7.2.6结合方块思考
把3维数据表示为多维数组时,书写顺序为(channel, height, width)。比如,通道数为C、高度为H、长度为W的数据的形状可以写成(C, H, W),滤波器也一样,可以写成(C, FH, FW)。
在这个例子中,数据输出是1张特征图,就是通道数为1的特征图,怎么在通道方向上也拥有多个卷积运算的输出?为此,就需要用到多个滤波器
通过应用FN个滤波器,输出特征图也生成了FN个。如果将这FN个特征图汇集在一起,就得到了形状为(FN, OH, OW)的方块。将这个方块传给下一层,就是CNN的处理流
7.2.7批处理
神经网络的处理中进行了将输入数据打包的批处理,卷积运算也同样对应批处理,需要将在各层间传递的数据保存为4维数据在各个数据的开头添加批用的维度,数据作为4维的形状在各层间传递。批处理将N次的处理汇总成了1次进行