二维卷积计算方式
以keras构建的模型为例 输入的图像shape为 (28, 28, 3),分别表示 (H, W, channels)。 注:pytorch的输入shape为 (3,28, 28),分别表示 (channels,H, W)。
各层输出
各层计算结果:
- 卷积层包含32个卷积核,每个卷积核的窗口大小为(3,3),不采用padding填充(padding=“valid”),窗口移动步长strides为1。因此,卷积层输出的矩阵高H为 (28 - 3 + 1) / strides = 26 ,因此输出矩阵(26, 26, 32)。若要保持输入输出矩阵的shape一致,需padding=“same”。
- 池化层使用(2, 2)的窗口进行最大池化,下采样后得到输出矩阵 (13, 13, 32)
- Flatten()层将 (13, 13, 32) 转平为一维向量

卷积层计算方式
- 对于shape为(28, 28, 3)输入矩阵,每个卷积核的shape为 (3, 3, 3)。即对于输入矩阵中每个channels下的(28, 28)矩阵, 都会有一个(3, 3) 的卷积窗口滑动并点积计算。三个窗口分别得到的值求和并加上偏置 b 作为卷积值,操作示例如下图所示:

卷积翻转180度!
对两个矩阵做卷积运算的时候,作为卷积算子的矩阵要逆时针旋转180度,即  翻转为:  然后进行点积运算。
上面例子中,卷积核已翻转,各卷积核计算结果如下: r1 = -1 r2 = -1 r3 = 1 结果为 r1 + r2 + r3 +b = 0
参考博客:
|