matlab, CNN,步长不为1的卷积实现

通常strides为1的情况下,两矩阵可以通过convn函数实现卷积运算。可是如果步长为4(不为1)的情况下呢?比如AlexNet网络中的C1层,stride=4,这在代码实现中是怎么实现的呢???应该需要自己定义函数然后调用它吧,可具体怎么定义呢?求代码。。。

C=conv2(A,B)得到单步长卷积结果后,对C每隔k行取一个值,即D=C(1:k:end,1:k:end)就是步长为k的卷积结果。

利用convn实现会比较高效(我说的是相对于用循环直接求),因为卷积的内部是利用fft来计算的。如果stride不为1,显然不能直接利用convn。可以参考caffe的代码看看它是怎么实现的

参考一下tiny-cnn的代码 https://github.com/tiny-dnn/tiny-dnn/tree/master/tiny_dnn/core/kernels

粗略看了一下,他好像是用多层循环来实现的。

此外,在下面这段代码中用到了w_strideh_stride

const float_t * ppw = pw;
const float_t * ppi = pi + params.in_padded.width_ *
        (y * params.h_stride) +
        x * params.w_stride;