再谈卷积神经网络中为什么会有矩阵乘法-FPGA常见问题社区-FPGA CPLD-ChipDebug

再谈卷积神经网络中为什么会有矩阵乘法

在之前的文章中(卷积神经网络中为什么会有矩阵乘法?),我们提到的情形是只有一个通道的输入数据,相应的,也就只有一个与之对应的Kernel。如果是多通道输入数据,是否依然存在矩阵乘法呢?我们看下面的例子。

在这个例子中,有3个输入通道(RGB),每个通道有与之对应的Kernel,此时的卷积运算并没有本质的变化,就每个通道而言,仍然是二维滤波器。将每个通道的输出结果对应元素相加即为多通道情形下的卷积结果。这里可以设置偏置(Bias)。图中的偏置值为1。此时,输入为多通道,输出为单通道。

1.jpg

进一步扩展,如果每个通道有多个与之对应的Kernel,会是什么情形呢?如下图所示。图中,每个通道有4个Kernel。从而,最终输出有4个通道。输出每个通道的计算方式与上图保持一致。

2.jpg

基于以上两图,我们不难得出如下结论:
输入通道与Kernel通道保持一致,例如上图中有3个输入通道和3个Kernel通道。
输出通道个数与每个Kernel通道内的滤波器个数一致,例如上图中每个Kernel通道内有4个滤波器,故输出通道个数为4。
每个输出通道所包含的元素个数与滑窗个数一致。这再次证明多通道本质上与单通道的卷积运算是一致的。

现在,我们对输入通道数据进行重组,如下图所示方式。取出每个通道滑窗内的数据,排成一列,最终构成一个矩阵。

3.jpg

紧接着,将每个通道对应的Kernel也进行重组,如下图所示方式。最终形成Kernel矩阵。与输入通道数据重组不同的是这里将Kernel系数按行排列,每个Kernel通道内滤波器的个数决定了行数。

4.jpg

至此,输入数据和Kernel系数都被重组为矩阵,重组的目的就是为了满足矩阵运算的需求,这样就可以按照矩阵乘法计算卷积运算了。

请登录后发表评论

    没有回复内容