卷积操作与卷积神经网络
1. 卷积运算
卷积运算是一个改变(提取)特征的过程,无论从数值还是维度上均是如此。
原始数据特征经过卷积,输出任意维数的卷积后特征,这就是特征提取的过程。
1.1 基础的卷积运算
虽然卷积层得名于卷积(convolution)运算,但我们通常在卷积层中使用更加直观的互相关(cross-correlation)运算。
在二维卷积层中,一个二维输入数组 和 一个二维核(kernel)数组 通过 互相关运算 输出一个二维数组。
我们用一个具体例子来解释二维互相关运算的含义。
如图5.1所示:
输入是一个高和宽均为3的二维数组,我们将该数组的形状记为 3×3 或(3,3)。核数组的高和宽分别为2,该数组在卷积计算中又称卷积核或过滤器(filter)。
卷积核窗口(又称卷积窗口)的形状取决于卷积核的高和宽,即 2×2 。
图5.1中的阴影部分为 第一个输出元素 及其计算所使用的输入和核数组元素: 0×0+1×1+3×2+4×3=19
1.2 填充和步幅
由上一节的例子可以看出,通过对原始数组直接的卷积操作,输出尺寸会有所缩小。
一般来说,假设输入形状是 nh×nw ,卷积核窗口形状是 kh×kw ,那么输出形状将会是
(nh?kh+1)×(nw?kw+1).
为解决这一问题,我们引入 填充 和 步幅 的概念,二者作为卷积运算中的超参数而存在。
这一举动将可以在给定输入和卷积核大小的情况下,任意改变 卷积输出 的数组大小和形状。
1.2.1 填充
一般来说,如果在高的两侧一共填充 ph 行,在宽的两侧一共填充 pw 列,那么输出形状将会是
(nh?kh+ph+1)×(nw?kw+pw+1),
也就是说,输出的高和宽会分别增加 **ph 和 pw **。
在很多情况下,我们会设置 ph=kh?1 和 pw=kw?1 来使输入和输出具有相同的高和宽,这样会方便在构造网络时推测每个层的输出形状。
假设这里 kh 是奇数,我们会在高的两侧分别填充 ph/2 行。
如果 kh 是偶数,一种可能是在输入的顶端一侧填充 ?ph/2? 行,而在底端一侧填充 ?ph/2? 行。在宽的两侧填充同理。
卷积神经网络经常使用 奇数高宽 的卷积核,如1、3、5和7,所以两端上的填充个数相等。
对任意的二维数组X,设它的第i行第j列的元素为X[i,j]。
当两端上的填充个数相等,并使输入和输出具有相同的高和宽时,我们就知道输出Y[i,j]是由输入以X[i,j]为中心的窗口同卷积核进行互相关计算得到的。
1.3 多维(多通道)卷积(重要!!!)
本节我们将介绍含多个输入通道或多个输出通道的卷积核。
前面两节里我们用到的输入和输出都是二维数组,但真实数据的维度经常更高。
例如,彩色图像在高和宽2个维度外还有RGB(红、绿、蓝)3个颜色通道。
假设彩色图像的高和宽分别是 h 和 w (像素),那么它可以表示为一个** 3×h×w **的多维数组。我们将大小为3的这一维称为 通道(channel)维 。
当输入数据含多个通道时,我们需要构造一个 输入通道数 与 输入数据的通道数 相同 的卷积核,从而能够与含多通道的输入数据做 互相关运算 。
下面举例说明多通道卷积的运行原理:
图5.4展示了含2个输入通道的二维互相关计算的例子。
在每个通道上,二维输入数组与二维核数组做互相关运算,再按通道相加即得到输出。
图5.4中阴影部分为第一个输出元素及其计算所使用的输入和核数组元素: (1×1+2×2+4×3+5×4)+(0×0+1×1+3×2+4×3)=56 。
2. 卷积神经网络
2.1 conv2d()卷积神经网络
基于tensorflow实现的conv2d()函数。
tf.nn.conv2d(
input,
filter,
strides,
padding,
use_cudnn_on_gpu=True,
data_format='NHWC',
dilations=[1, 1, 1, 1],
name=None
)
主要讲解前四个参数:
在默认data_format=“NHWC”时,
4D张量的格式为[batch, height, width, channels],以图片处理为例:分别为图片的批量(每次处理的图片张数),图片高度像素数,图片宽度的像素数,图片通道数(彩色为3通道,灰度为一通道,其余可能还有深度等)
此时:
- input的四个参数分别为输入张量的上述参数
- filter的四个参数[filter_height, filter_width, in_channels, out_channels],分别为卷积核/滤波器的像素高度,像素宽度,输入通道数(与input中的通道数相等),输出通道数(卷积核个数,卷积层学习的特征个数)
注意:一个卷积核可能有多个通道,其通道数与输入的张量通道数相同。 - strides:四维张量,[----,高度步长,宽度步长,----],第一和第四个数没用,但是默认为1
- padding:填充方式:“SAME”:用0填充边缘,使得卷积后的图像尺寸和原始图像一致,如下图1所示。
“VALID”:不填充,右边和下边多余的行和列丢弃,如下图2所示。
参考链接:https://blog.csdn.net/qq_34782535/article/details/87906835
这篇文章很好的介绍了多维卷积的概念。