Tensorflow 说卷积实现是基于GEMM(矩阵乘法)还是基于1x1内核是什么意思?

Tensorflow 说卷积实现是基于GEMM(矩阵乘法)还是基于1x1内核是什么意思?,tensorflow,conv-neural-network,matrix-multiplication,convolution,tiling,Tensorflow,Conv Neural Network,Matrix Multiplication,Convolution,Tiling,我一直在试图理解(但不幸失败的是)图像卷积(高度、宽度、通道)是如何在软件中实现的 我听说人们说他们的卷积实现是使用GEMM完成的,或者使用“直接卷积”完成的,或者使用1x1内核完成的 我发现它非常令人困惑,我无法理解到处都有这么多不同的描述方式——我想我理解了一个典型的卷积,就像是图像上的数学运算,但当有人说他们使用以下方式之一时,这意味着什么 1x1内核或1x1卷积(这里内核是什么意思) 杰姆 “直接卷积” 对于使用GEMM进行卷积,我的理解是,每个输入图像和滤波器都使用im2col和i

我一直在试图理解(但不幸失败的是)图像卷积(高度、宽度、通道)是如何在软件中实现的

我听说人们说他们的卷积实现是使用GEMM完成的,或者使用“直接卷积”完成的,或者使用1x1内核完成的

我发现它非常令人困惑,我无法理解到处都有这么多不同的描述方式——我想我理解了一个典型的卷积,就像是图像上的数学运算,但当有人说他们使用以下方式之一时,这意味着什么

  • 1x1内核或1x1卷积(这里内核是什么意思)
  • 杰姆
  • “直接卷积”
对于使用GEMM进行卷积,我的理解是,每个输入图像和滤波器都使用
im2col
im2row
ops转换为2d矩阵,然后这两个矩阵简单地相乘

3d输入图像(高度、宽度、输入通道)转换为2d矩阵,4-d内核(输出通道、输入通道、内核高度、内核宽度)转换为2d矩阵。或者“基于GEMM的卷积实现”意味着什么?如果这就是它的意思,那么它与“使用1x1内核进行卷积”有何不同

1x1内核或1x1卷积(这里内核是什么意思)

您可以使用
3x3
卷积,这样您就可以使用一个包含
9
元素的正方形在图像上滑动(使用一些指定的步幅、放大等)。在本例中,您使用了
1x1
卷积,因此内核是单个元素(同时
stride=1
且没有膨胀)

所以,不用滑动窗口求和,你只需用这个单值内核线性投影每个像素

它是一种廉价的操作,并且被用作许多现代体系结构中用于增加/减少信道数量的深度可分离卷积的一部分

杰姆 在您提供的文章中,如下所示:

[…]函数称为GEMM。它是BLAS(基本线性代数)的一部分 (次级程序)

一个描述一组低级代数运算以及它们应该如何在计算机上执行的规范也是如此

现在,有很多BLAS的实现都是针对特定的体系结构定制的,或者具有一些在某些上下文中可用的特性。例如,有一个是为GPU编写和优化的(并且被像PyTorch这样的深度学习“更高级别”库大量使用)或为Intel CPU编写和优化的(您可以在web上的任何地方阅读有关BLAS的更多信息)

通常使用低级语言(Fortran、C、汇编、C++)编写,以获得最佳性能

GEMM是广义矩阵乘法例程,用于实现完全连接的层和卷积,由各种BLAS实现提供。 它本身和深度学习卷积无关,它是一个快速矩阵乘法例程(考虑缓存命中之类的事情)

直接卷积 这是一种复杂度为O(n^2)的方法,因此您只需将项目彼此相乘即可。有一种更有效的方法使用快速傅立叶变换,即
O(n*log(n))
。关于这部分的一些信息和问题更适合与数学相关的交流