计算题
近年来,深度学习在智慧农业中得到了重要应用。卷积神经网络是一种深度学习网络,如1(a)所示,为单通道二维卷积方式,输入特征为1*8*8,其中1为通道数,8*8为特征长度和宽度,采用如1(b)所示的3*3 大小的卷积核进行卷积操作(没有Padding操作,步长为1)。
1(a):
1(b):
(1)请输出卷积操作后的特征图。
(2)得到上述步骤(1)的特征图后,采用2*2大小的池化核进行池化操作(最大池化,步长为1)。请输出池化后的特征图。
(1) 卷积操作
输入:
1 个通道,8×8 矩阵(记为 ( I ))
卷积核:
无 padding,步长 stride = 1,输出尺寸为:
计算方法:
对输出位置 (i,j),取 (I) 中以 (i,j)为左上角的 3×3 块,与 (K) 逐元素相乘后求和。
我们先看几个典型区域。
注意到 (I) 的结构:左上 4×4 全是 5,右上 4×4 全是 0;左下 4×4 全是 0,右下 4×4 全是 5,中间有一行一列是交界处(第 4 行和第 4 列 是 5→0 或 0→5)。
步骤 1:左上区域(卷积核覆盖全为 5)
左上角 (0,0) 输出:
= (5-5) + (5-5) + (5-5) = 0+0+0 = 0
其实对于全为 5 的 3×3 区域,卷积核每一列的 1,0,-1 对常数 5 运算:
第一列:(1·5 + 1·5 + 1·5 = 15)
第二列:(0)
第三列:(-1·5 + -1·5 + -1·5 = -15)
总和 (15 + 0 - 15 = 0),所以只要 3×3 块数值相同,结果就是 0。
同理,全为 0 的区域结果也是 0。
步骤 2:考虑边界附近
看 第 3 列和第 4 列 之间(即 5 到 0 的垂直边界在 (I) 的第 3 列和第 4 列之间)。
列 j = 2 时,看卷积核的列:它覆盖 I 的列 2,3,4。
比如取 i=0, j=2 的块(覆盖 I 的行 0,1,2;列 2,3,4):
卷积核 (K):
第一列 (1,1,1):对应 I 列 2 (全 5) → 5+5+5 = 15
第二列 (0,0,0):对应 I 列 3 (全 5) → 0
第三列 (-1,-1,-1):对应 I 列 4 (全 0) → 0
总和 15+0+0=15。
所以垂直边界附近会出现非零值。
我们手工分几个区快速算出 6×6 结果:
记输出矩阵 (O)。
区域 A:卷积覆盖全是 5 或全是 0 → 输出 0。
覆盖全是 5 的情况:需要块在 I 的列 0~2,3? 仔细看:
如果块的列范围在 0~2 并且行范围在 0~2 内 → 块内全是 5 吗?
I 行 0~2,列 0~3 全是 5,但是块宽 3,比如 j=1 时列 1~3 块内包含第 3 列(也是 5),所以 j=0,1,2 在行 i=0,1,2 时块内全是 5?不对——j=2 时列 2~4 包含第4列(0),有5有0。
所以我们精确按 3×3 块是否全是同一数值来快速判断。
更好方法:计算卷积等价于对 I 先与 [1,0,-1] 在水平方向做 1D 卷积吗?实际核是垂直边缘检测(因为三行一样),相当于垂直方向的求和乘以水平差分。
核:
这等价于竖直方向的向量 [1;1;1] 与水平方向的向量 [1,0,-1] 的外积。
因此可以分解为:先用 [1,0,-1] 对 I 的每一行做水平卷积,得到中间矩阵 (H),尺寸 8×(8-2)=8×6(因为水平核长3,stride1)。然后再用竖直核 [1;1;1] 对 H 的每一列做竖直卷积(核长3 stride1),得到 6×6。
先做水平卷积(核 [1,0,-1])
对 I 的某一行,比如第0行 [5,5,5,5,0,0,0,0]
计算 H(i,j) = I(i,j) - I(i,j+2)(因为 1I(j) + 0I(j+1) + (-1)*I(j+2) 等于 I(j) - I(j+2))。
第一行 5,5,5,5,0,0,0,0:
j=0: I(0,0)-I(0,2)=5-5=0
j=1: I(0,1)-I(0,3)=5-5=0
j=2: I(0,2)-I(0,4)=5-0=5
j=3: I(0,3)-I(0,5)=5-0=5
j=4: I(0,4)-I(0,6)=0-0=0
j=5: I(0,5)-I(0,7)=0-0=0
所以第0行 H: [0,0,5,5,0,0]
第1行同上: [0,0,5,5,0,0]
第2行:[0,0,5,5,0,0]
第3行(第3行 I 同第0行):[0,0,5,5,0,0]
第4行 I=[0,0,0,0,5,5,5,5]:
j=0: 0-0=0
j=1: 0-0=0
j=2: 0-5=-5
j=3: 0-5=-5
j=4: 5-5=0
j=5: 5-5=0
所以 [0,0,-5,-5,0,0]
第5行:[0,0,-5,-5,0,0]
第6行:[0,0,-5,-5,0,0]
第7行:[0,0,-5,-5,0,0]
因此 (H)(8×6):
再做竖直卷积(核 [1;1;1]) 对 H 的每一列
竖直方向长度 8,核长3 stride1,得 6 行输出。
竖直求和:对列中连续三行相加。
第0列:[0,0,0,0,0,0,0,0]
三行相加:
i=0..2: 0+0+0=0
i=1..3: 0+0+0=0
i=2..4: 0+0+0=0
i=3..5: 0+0+0=0
i=4..6: 0+0+0=0
i=5..7: 0+0+0=0
所以全 0。
第1列:同第0列全 0。
第2列:
数值:5,5,5,5,-5,-5,-5,-5
i=0: 5+5+5=15
i=1: 5+5+5=15
i=2: 5+5+(-5)=5
i=3: 5+(-5)+(-5)=-5
i=4: (-5)+(-5)+(-5)=-15
i=5: (-5)+(-5)+(-5)=-15
第3列:同第2列数值完全一样(因为 H 的第3列同第2列)
所以也是 15,15,5,-5,-15,-15。
第4列:全 0 → 全 0
第5列:全 0 → 全 0
因此卷积后特征图 (O)(6×6):
答案 (1):
(2) 最大池化 2×2,stride=1
对 O 进行 2×2 最大池化,stride=1。
输入 6×6 → 输出尺寸 (6-2+1)×(6-2+1) = 5×5。
计算左上角第一个池化窗口 (行 0~1, 列 0~1):
窗口 (行 0~1, 列 1~2):
窗口 (行 0~1, 列 2~3):
窗口 (行 0~1, 列 3~4):
窗口 (行 0~1, 列 4~5):
这是第一行输出(5个数)。
依次类推,观察 O 的结构,列 2 和 列3 有较大值,其它列为 0。
逐行池化(快速看每 2×2 块最大值):
O 矩阵重复性很强,可以分区:
- 池化行 0~1(对应 O 的 行0行1):
列块 0~1: max(0,0,0,0)=0
列块 1~2: max(0,15,0,15)=15
列块 2~3: max(15,15,15,15)=15
列块 3~4: max(15,0,15,0)=15
列块 4~5: max(0,0,0,0)=0
得 [0,15,15,15,0] - 池化行 1~2(对应 O 的 行1行2):
列块0~1:0
列块1~2: max(0,15,0,5)=15
列块2~3: max(15,15,15,5)=15
列块3~4: max(15,0,5,0)=15
列块4~5:0
得 [0,15,15,15,0] - 池化行 2~3(对应 O 的行2行3):
列块0~1:0
列块1~2: max(0,5,0,-5)=5
列块2~3: max(5,5,5,-5)=5
列块3~4: max(5,0,-5,0)=5
列块4~5:0
得 [0,5,5,5,0] - 池化行 3~4(对应 O 的行3行4):
列块0~1:0
列块1~2: max(0,-5,0,-15)=0
列块2~3: max(-5,-5,-15,-15)=-5
列块3~4: max(-5,0,-15,0)=0
列块4~5:0
得 [0,0,-5,0,0] - 池化行 4~5(对应 O 的行4行5):
列块0~1:0
列块1~2: max(0,-15,0,-15)=0
列块2~3: max(-15,-15,-15,-15)=-15
列块3~4: max(-15,0,-15,0)=0
列块4~5:0
得 [0,0,-15,0,0]
答案 (2):
微信扫描下方的二维码阅读本文

