本篇讨论卷积层前项传播过程中的主要计算:卷积算法的实现

卷积计算的输入从二维的矩阵到四维张量,以及卷积核从二维矩阵到四维矩阵都对应不同大小的输出,最后会统一到一个算法里面,这里用一个函数来表示:
a=conv(x,w) a = conv(x,w)

xx 是输入, ww 是卷积核, aa 是卷积的结果,即特征图(feature map)

注:
有的人叫它为 输出特征图。

单通道:

先看看输入和卷积核都是矩阵的情况:

蓝色的为输入,红色的是卷积核,灰色是结果(即:输出特征图)

卷积的过程就是,将输入划分成若干个与卷积核相同大小的不同子集,这些子集再分别与卷积核点乘相加:

如上图所示,本例的输入可以划分为4个子集(为什么是4个,这里涉及一个步长的变量stride,后面讨论),将它们各自与卷积核点乘,得到的结果就是输出红框内容。

现在,将上述的过程用公式向量表示,就拿第一个子集矩阵(将其表示为 x(1)x_{(1)})来说吧:
x(1)=[x1,1x1,2x1,3x2,1x2,2x2,3x3,1x3,2x3,3]x_{(1)} =\left[ \begin{array}{ccc} x_{1,1} & x_{1,2} & x_{1,3}\\ x_{2,1} & x_{2,2} & x_{2,3}\\ x_{3,1} & x_{3,2} & x_{3,3} \end{array}\right]

然后将其矩阵按行展开,变成一个行向量
x(1)=[x1,1x1,2x1,3x2,1x2,2x2,3x3,1x3,2x3,3]x_{(1)} =\left[ \begin{array}{ccc} x_{1,1} & x_{1,2} & x_{1,3} & x_{2,1} & x_{2,2} & x_{2,3} & x_{3,1} & x_{3,2} & x_{3,3} \end{array}\right]

对这四个子集x(1)x(2)x(3)x(4)x_{(1)} x_{(2)} x_{(3)} x_{(4)}都进行同样的操作,然后并在一起得到一个矩阵
X=[x(1)x(2)x(3)x(4)]X =\left[ \begin{array}{ccc} x_{(1)}\\ x_{(2)}\\ x_{(3)}\\ x_{(4)} \end{array}\right]

同样的,再将卷积核如法炮制,只不过这次是展开成列向量
W=[w1,1w1,2w1,3w2,1w2,2w2,3w3,1w3,2w3,3]W =\left[ \begin{array}{ccc} w_{1,1}\\ w_{1,2}\\ w_{1,3}\\ w_{2,1}\\ w_{2,2}\\ w_{2,3}\\ w_{3,1}\\ w_{3,2}\\ w_{3,3} \end{array}\right]
但是有人为了节省纸张,将其写成横向转置的形式:
W=[w1,1w1,2w1,3w2,1w2,2w2,3w3,1w3,2w3,3]TW =\left[ \begin{array}{ccc} w_{1,1} & w_{1,2} & w_{1,3} & w_{2,1} & w_{2,2} & w_{2,3} & w_{3,1} & w_{3,2} & w_{3,3} \end{array}\right]^T

更新时间:2024-04-29 06:05:01
更新时间:2024-04-29 04:16:06
更新时间:2024-04-29 00:36:57
更新时间:2024-04-29 00:37:12
更新时间:2024-04-28 22:33:53
更新时间:2024-04-28 22:16:11
更新时间:2024-04-28 23:07:04
更新时间:2024-04-29 06:44:20