您的位置:首页 > Web前端

caffe学习:卷积计算

2018-01-11 17:00 1016 查看
在caffe中如何计算卷积的?

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

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

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

我们可以参考下图:



具体的论文参考:High Performance Convolutional Neural Networks for Document Processing

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

我们假设

输入数据input_features:W∗H∗D, 其中D是数据深度, W∗H是数据大小

卷积核conv_filter:Kw∗KH∗D∗M, 其中K∗K是核大小, D是核深度, M是核数量

卷积超参数:stride是卷积步长, SW表示宽度方向的步长, SH表示高度方向的步长.

卷积超参数:pad是卷积填充操作, padW代表宽度方向上的填充,长度 padH代表高度方向上的填充长度.

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

inputfeatures(Matrix)=ofs×(KW∗KH∗D)

input_features(Matrix)是一个二维矩阵, 其中ofs代表的是output_features_size, ofs由输入数据的大小W∗H和卷积核大小KW∗KH共同确定.

ofs=[W−KW+2∗padWSW+1]×[H−KH+2∗padHSH+1]

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

第三步, 进行矩阵运算

outputfeatures(Matrix)=input_features(Matrix)×conv_features(Matrix)={ofs∗(KW∗KH∗D)}×{(KW∗KH∗D)∗M}=ofs×M=(W−KW+2∗padWSW+1)×(H−kH+2padHSH+1)

最后将output_features(Matrix)转换成output_features

output_features(Matrix)→outputfeatures=(W−KW+2∗padWSW+1)∗(H−kH+2padHSH+1)∗M
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: