1.1输入矩阵展开(im2col_cpu函数的解读)

  1. 函数原型:void im2col_cpu(const Dtype* data_im, const int channels,const int height, const int width, const int kernel_h, const int kernel_w,const int pad_h, const int pad_w,const int stride_h, const int stride_w,const int dilation_h, const int dilation_w,Dtype* data_col)
  2. 输入:
  1. data_im:输入data,当前layer的input blob data(也称为“bottom blob”);一般是float*类型。
  2.  Channels:当前data的input blob data(也称为“bottom blob”)的channel个数;
  3. Height:当前data的input blob data(也称为“bottom blob”)的rows;
  4. Width:当前data的input blob data(也称为“bottom blob”)的cols;
  5. kernel_h:当前layer的卷积核的rows;
  6.  kernel_w:当前layer的卷积核的cols;
  7. pad_h:当前layer的高度边缘要填充的个数,也就是要填充的rows的个数;
  8. pad_w:当前layer的宽度边缘要填充的个数,也就是要填充的cols的个数;
  9. stride_h:卷积时,窗口滑动的rows方向的步长;
  10. stride_w:卷积时,窗口滑动的cols方向的步长;
  11.  dilation_h:卷积核rows方向的缩放系数,默认为1;一般不做修改或配置,下面的计算不考虑该因子;
  12. dilation_w:卷积核的cols方向的缩放系数,默认为1;一般不做修改或配置,下面的计算不考虑该因子;
  1. 输出:
  1. data_col:按列排列的数据;输出的大小如下:

其中,

  1. 标识输出矩阵的大小;
  2. 标识输入的数据的channels数,输出的数据channels数保持不变;
  3. 标识卷积核的高度;
  4. 标识卷积核的宽度;
  5. 标识卷积操作后的高度;

,其中,标识输入data的height;标识卷积层padding参数的高度;标识卷积核的高度;标识卷积的高度的步长;

  1. 标识卷积操作后的宽度;

,其中,标识输入data的width;标识卷积层padding参数的宽度;标识卷积核的宽度;标识卷积的宽度的步长;

 

  1. 返回值:无
  2. 处理:

展开的数据以如下的方式存储:

其中,H都是*大小的向量,和是卷积核的高度和宽度;

扩展变换方式很简单,其实就是把卷积核滑动时,卷积核覆盖的元素作为展开矩阵的列向量就好了。

设输入的矩阵为{1,3,120,120},卷积核的参数为==3、==3和==1。

则展开的输出矩阵中= =39;

生成的H向量,举例如下:

,其中头为0,是因为padding的y;然后每有一个0,是因为padding的x。该矩阵包含与卷积核中进行线性相乘的所有元素。

,因为滑动窗口y-轴方向已经下滑了一行,因此,不再受padding-y的影响;该矩阵包含与卷积核中进行线性相乘的所有元素。

依次类推即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值