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

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

3个回答

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

weixin_42263415
weixin_42263415 虽然没降低计算量但也是一个方法
大约 2 年之前 回复

参考一下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;
hijack00
hijack00 嗯嗯,一般步长设为1也够用了,步长设为大于1的值主要的考虑是为了降低运算量吧,虽然也有可能防止过拟合
大约 4 年之前 回复
jiafeier_555
咆哮的大叔 谢谢回复!只是突然觉得好麻烦的样子,我还是想想其他办法,比如用CNN训练前,把图像处理一下,训练的时候尽量不要涉及到步长的问题= =
大约 4 年之前 回复

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

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐