卷积操作转化成矩阵乘法

参考:https://petewarden.com/2015/04/20/why-gemm-is-at-the-heart-of-deep-learning/

平常都是无脑使用Pytorch提供的nn.Conv2d方法,但是并不关心具体该如何实现,原来是把卷积操作转化成矩阵乘法,而不是真的通过滑动卷积核来做卷积,下面做具体介绍。

首先看一下下面的示意图,左边是输入图像,右边是卷积核(为方便说明,只用了一个卷积核)。

下面是用这个卷积核对输入图像做卷积操作,最后得到一个2维的平面

由下图可以看到卷积操作其实就是把输入图像划分成若干个块(patch),每个块的维度和卷积核保持一致(这里暂时忽略stride,padding的影响)。然后我们可以把每个3维的patch展开成一维向量,然后拼接起来得到一个二维矩阵。

因为每个patch都是和相同的卷积核做卷积,那么我们也可以同样把卷积核展开成以为向量。下图中右边的卷积核矩阵表示多个卷积核拼凑的结果。

完整的转化过程可看下图:

MARSGGBO?原创

如有意合作,欢迎私戳

邮箱:[email protected]

2019-12-20 17:17:07

原文地址:https://www.cnblogs.com/marsggbo/p/12074297.html

时间: 2024-08-09 03:19:14

卷积操作转化成矩阵乘法的相关文章

poj3735—Training little cats(特殊操作转化为矩阵操作)

题目链接:http://poj.org/problem?id=3735 题目意思: 调教猫咪:有n只饥渴的猫咪,现有一组羞耻连续操作,由k个操作组成,全部选自: 1. g i 给第i只猫咪一颗花生 2. e i 让第i只猫咪吃光它的花生 3. s i j 交换猫咪i与猫咪j的花生 现将上述一组连续操作做m次后,求每只猫咪有多少颗花生? 思路:这道题难点在如何把这种奇怪的操作转化为矩阵操作,网络上看到一个画的很好的图,这里直接偷过来. 现在,对于每一个操作我们都可以得到一个转置矩阵,把k个操作的矩

HDU 1159 Common Subsequence--DP--(转化成矩阵)

题意:找最长公共子序列(不要求连续) 分析:二维dp肯定的,不过我自己用的四层循环,超时:正解是画矩阵,找规律.以后要多注意这种思想 WA了很多遍,原因:1.对数组边界的处理:2.while(1)超时,改成while(cin>>a>>b)就过了 代码: #include<cstring> #include<cstdio> #define max(a,b) a>b?a:b using namespace std; char a[1005],b[1005]

学习心得:《十个利用矩阵乘法解决的经典题目》from Matrix67

本文来自:http://www.matrix67.com/blog/archives/tag/poj大牛的博文学习学习 节选如下部分:矩阵乘法的两个重要性质:一,矩阵乘法不满足交换律:二,矩阵乘法满足结合律经典题目1 给定n个点,m个操作,构造O(m+n)的算法输出m个操作后各点的位置.操作有平移.缩放.翻转和旋转    这 里的操作是对所有点同时进行的.其中翻转是以坐标轴为对称轴进行翻转(两种情况),旋转则以原点为中心.如果对每个点分别进行模拟,那么m个操作总共耗时 O(mn).利用矩阵乘法可

[转]十个利用矩阵乘法解决的经典题目

好像目前还没有这方面题目的总结.这几天连续看到四个问这类题目的人,今天在这里简单写一下.这里我们不介绍其它有关矩阵的知识,只介绍矩阵乘法和相关性质.    不要以为数学中的矩阵也是黑色屏幕上不断变化的绿色字符.在数学中,一个矩阵说穿了就是一个二维数组.一个n行m列的矩阵可以乘以一个m行p列的矩阵,得到的结果是一个n行p列的矩阵,其中的第i行第j列位置上的数等于前一个矩阵第i行上的m个数与后一个矩阵第j列上的m个数对应相乘后所有m个乘积的和.比如,下面的算式表示一个2行2列的矩阵乘以2行3列的矩阵

矩阵乘法&amp;&amp;矩阵快速幂&amp;&amp;最基本的矩阵模型——斐波那契数列

矩阵,一个神奇又令人崩溃的东西,常常用来优化序列递推 在百度百科中,矩阵的定义: 在数学中,矩阵(Matrix)是一个按照长方阵列排列的复数或实数集合 ,最早来自于方程组的系数及常数所构成的方阵.这一概念由19世纪英国数学家凯利首先提出. 好,很高深对吧.那我们就更加直接地理解一下矩阵的实质:二维数组 好了这个SB都会,就不解释了 同二维数组一样,矩阵是一个'纵横排列的二维数据表格',它一般是一个n*m的二维数组,其中n*m表示它有n行m列 每一位上的数可以用下标i,j来表示,形如这样一个矩阵:

详解矩阵乘法

详解矩阵乘法 本篇随笔详细讲解一下信息学奥林匹克竞赛中矩阵乘法的相关内容.矩阵和矩阵乘法的相关内容是数学中线性代数部分的内容,欢迎有兴趣的读者再自行涉猎一些纯粹的数学上的知识.本篇随笔只针对矩阵乘法在信息学和算法竞赛中的应用进行讲解. 矩阵加减法的概念 所谓矩阵其实就是一个数阵,我们可以把它看作一个二维数组. 这是矩阵的概念. 为了方便后面的学习,我们将一个矩阵记作大写字母,如\(A,B,C\)等等,而类比于二维数组,把矩阵中的每个数都用一个"坐标"来表示,记作:\(A(a,b)\)等

卷积操作的GPU粗粒度并行实现及测试

一.    算法基本思想: 1.           GPU中的一个线程产生一个卷积结果,有多少个结果就使用多少个Block; 2.           矩阵和卷积核存放在共享内存中,卷积结果存放在全局内存中: 3.           支持10000以内任意维度的二维矩阵,卷积核最大支持16x16. 4.           支持任意多幅图像的批处理. 二.    实验平台: CPU:Intel(R) Xeon(R) E5-2650 0 @2.00GHz 16核 32线程 GPU:NVIDIA

卷积操作的GPU粗粒度并行实现及测试(优化)

A.边界扩展: B.字块对齐. Matrix Size Number Kernel CPU(s) CPU2GPU GPU-Kernel GPU2CPU 5x4 1 5x4 <1ms <1ms <1ms <1ms 12x9 1 5x4 <1ms <1ms <1ms <1ms 18x19 1 5x4 <1ms <1ms <1ms <1ms 118x29 1 5x4 <1ms <1ms <1ms <1ms 138x5

HDU 5895 Mathematician QSC(矩阵乘法+循环节降幂+除法取模小技巧+快速幂)

传送门:HDU 5895 Mathematician QSC 这是一篇很好的题解,我想讲的他基本都讲了http://blog.csdn.net/queuelovestack/article/details/52577212 [分析]一开始想简单了,对于a^x mod p这种形式的直接用欧拉定理的数论定理降幂了 结果可想而知,肯定错,因为题目并没有保证gcd(x,s+1)=1,而欧拉定理的数论定理是明确规定的 所以得另谋出路 那么网上提供了一种指数循环节降幂的方法 具体证明可以自行从网上找一找 有