首先,我们来计算 2x10x10 的 Tensor 和 10x2x3x3 的 Kernel 进行卷积操作所需要的乘法次数。

对于每个输出点,我们需要将 Kernel 与 Tensor 中对应的部分进行元素相乘,并将结果相加。

对于一个 3x3 的 Kernel,需要进行 9 次乘法操作。

对于一个 10x10 的 Tensor 和一个 3x3 的 Kernel,我们可以在行和列方向上移动 Kernel,每次移动 1 个位置,总共需要进行 8x8 次卷积操作。

所以,总共需要进行 9x8x8=576 次乘法操作。

接下来,如果 Kernel 中的 3x3 系数可以横竖分解,即可以写成一个 3x1 和 1x3 的矩阵的乘积形式,我们可以优化乘法的次数。

对于一个 3x1 的矩阵和一个 10x10 的 Tensor 进行卷积操作,我们可以在行方向上移动 3x1 的矩阵,每次移动 1 个位置,总共需要进行 8 次卷积操作。

对于一个 1x3 的矩阵和一个 10x10 的 Tensor 进行卷积操作,我们可以在列方向上移动 1x3 的矩阵,每次移动 1 个位置,总共需要进行 8 次卷积操作。

所以,总共需要进行 8x2x8=128 次乘法操作。

因此,如果 Kernel 中的 3x3 系数可以横竖分解,则需要进行 128 次乘法操作。

卷积操作乘法次数优化:2x10x10 Tensor 与 10x2x3x3 Kernel

原文地址: https://www.cveoy.top/t/topic/qc9S 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录