caffe学习:卷积计算

在caffe中如何计算卷积的?
caffe中, 卷积网络的前向传播过程需要计算类似 Wx+B 这样的连接, forward_cpu_gemm()函数用weight矩阵和输入的bottom相乘, 然后对bias进行处理, bias程序会根据情况决定是否对bias进行scale(放大/缩小).

另外可以参考知乎问题:在 Caffe 中如何计算卷积?

我们知道, caffe中的卷积运算采用的是矩阵计算, 那么caffe是如何构造卷积矩阵的.

我们可以参考下图:
这里写图片描述
具体的论文参考:High Performance Convolutional Neural Networks for Document Processing

由图可知, 传统的卷积方式与矩阵计算方式的卷积运算的区别, 后者通过预先转换, 得到输入数据与卷积核的矩阵形式, 然后进行一次矩阵运算就能得到多个卷积核的特征图.

我们假设
输入数据input_features: WHD , 其中D是数据深度, WH 是数据大小
卷积核conv_filter: KwKHDM , 其中 KK 是核大小, D是核深度, M是核数量
卷积超参数:stride是卷积步长, SW 表示宽度方向的步长, SH 表示高度方向的步长.
卷积超参数:pad是卷积填充操作, padW 代表宽度方向上的填充,长度 padH 代表高度方向上的填充长度.

第一步, 先将input_features按照配置的卷积方式来转换成矩阵, 也就是图中input_features->input_features(Matrix)的过程.那么新的input_features(Matrix):

inputfeatures(Matrix)=ofs×(KWKHD)

input_features(Matrix)是一个二维矩阵, 其中ofs代表的是output_features_size, ofs由输入数据的大小 WH 和卷积核大小 KWKH 共同确定.
ofs=[WKW+2padWSW+1]×[HKH+2padHSH+1]

第二步, 将卷积核转换成矩阵形式, 由conv_filters KWKHDM 四维转换成conv_filters(Matrix) (KWKHD)M 二维格式.

第三步, 进行矩阵运算

outputfeatures(Matrix)=input_features(Matrix)×conv_features(Matrix)={ofs(KWKHD)}×{(KWKHD)M}=ofs×M=(WKW+2padWSW+1)×(HkH+2padHSH+1)

最后将output_features(Matrix)转换成output_features
output_features(Matrix)outputfeatures=(WKW+2padWSW+1)(HkH+2padHSH+1)M

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值