gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-05 04:57:18 29 4
gpt4 key购买 nike

我一直在努力理解(但惨遭失败)图像卷积(具有高度、宽度、 channel )是如何在软件中实现的。

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

我发现它非常令人困惑,无法理解到处都有这么多不同的描述方式 - 我认为我理解像 pytorch conv2d 这样的典型卷积。作为对图像的数学运算,但是当有人说他们使用以下方法之一进行 conv2d 时,它们是什么意思?

  • 1x1 内核或 1x1 卷积(内核在这里是什么意思)
  • GEMM
  • “直接卷积”

对于使用 GEMM 进行卷积,我的理解是基于 this paper是每个输入图像和过滤器都使用 im2colim2row 操作转换为二维矩阵,然后这两个只是矩阵相乘。

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

最佳答案

1x1 kernels or 1x1 convolution (what does kernel even mean here)

您可以使用 3x3 卷积,因此您有一个包含 9 元素的正方形在图像上滑动(具有一些指定的步幅、膨胀等)。在这种情况下,您有 1x1 卷积,因此内核是单个元素(同样具有 stride=1 并且没有扩张)。

因此,您无需使用带求和的滑动窗口,而只需使用此单值核对每个像素进行线性投影。

这是一种廉价的操作,被用作许多现代架构中使用的深度可分离卷积的一部分,以增加/减少 channel 数量。

GEMM

在您提供的文章中,置顶:

[...] function called GEMM. It’s part of the BLAS (Basic Linear AlgebraSubprograms)

所以 BLAS是描述一组低级代数运算以及它们应如何在计算机上执行的规范。

现在,您有很多 BLAS 实现是为特定架构量身定制的,或者具有在某些上下文中可用的某些特征。例如有 cuBLAS它是为 GPU 编写和优化的(并被 PyTorch 等深度学习“高级”库大量使用)或 Intel's MKL适用于 Intel CPU(您可以在网络上的任何地方阅读有关 BLAS 的更多信息)

通常这些是用低级(Fortran、C、汇编、C++)语言编写的,以实现最佳性能。

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

直接卷积

这是一种O(n^2) 复杂度的方法,因此您只需将项目相互相乘即可。有一种使用快速傅里叶变换的更有效方法,它是 O(n*log(n))。一些信息presented in this answer关于这部分的问题更适合与数学相关的堆栈交换。

关于tensorflow - 说卷积实现基于 GEMM(矩阵乘法)或基于 1x1 内核是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64506489/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com