我正在尝试实现卷积神经网络,但我不明白为什么使用 im2col 操作更有效。它基本上将要乘以过滤器的输入存储在单独的列中。但是为什么不应该直接使用循环来计算卷积而不是先执行 im2col 呢?
最佳答案
im2col()
的函数将卷积运算转换为矩阵乘法运算。它以一种可以通过矩阵乘法实现卷积输出的方式排列数据。 我们在 cuBLAS 库中有一个优化的 CUDA GEMM API,Intel MKL 有一个优化的 CPU GEMM,而 ciBLAS 的 GEMM API 可用于支持 OpenCL 的设备。
Im2col()
以矩阵乘法的内存访问规则的方式排列数据。 Im2col()
函数虽然增加了很多数据冗余,但是使用 Gemm 的性能优势超过了这种数据冗余。 Im2col()
的原因神经网络中的操作。 Im2col()
为 GEMM 整理数据:https://petewarden.com/2015/04/20/why-gemm-is-at-the-heart-of-deep-learning/
关于neural-network - 如何在卷积网络中使用 im2col 操作更有效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46213531/