caffe中卷积计算是如何使用通用矩阵乘法(GEMM)实现的?

首先有一个问题:Q:对于一个I*W*H输入图像,要求输出维度为W'*H'*256需要多少个卷积核?

A:第一种说法:由于输入channel是I且输出channel为256,如果将卷积核看做2纬的化,需要I*256个卷积核。

第二种解法:如果将一个卷积核看做一个三维矩阵的话,每个矩阵为I* K*K,那么就需要256个卷积核。

       

显然第一种说法是最易于理解的,但是对于计算机来说第二种是最易于实现的。具体实现步骤如下图所示:

首先将输入图像在相应卷积核的覆盖区域的像素点reshape为行向量,某一channel的输入图像W*H,可生成((W-kernelsize+2padding)/stride + 1)^2个行向量,如上图所示:(3-2)/1+1=2^2=4个行向量。然后再讲每一个行向量按其所在的channel排成一列,最后生成了如下的矩阵。

最后将每一个维度为 I* K*K的卷积核转化为列向量,将每一个列向量按输出channel排列成一行。如下图所示,就可以进行矩阵乘法了。

 

明白了以上计算步骤就可以理解Learning Structured Sparsity in Deep Neural Networks论文中关于GEMM计算的部分。

 其中:

高亮句子说明:一个三维的卷积核被转换为了一个行向量权重矩阵,它的列是一组权重,如下图所示。因为经过稀疏化处理之后卷积核矩阵维度减小,计算量相应减小,训练过程以及预测过程相应加速。 

 

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值