卷积层输出形状的计算

卷积层输出形状的计算

不考虑步幅情况下的计算(步幅为1)


假设
输入: X m ∗ n X_{m*n} Xmn
核大小: k ∗ l k*l kl

步幅为1,从高度(行)角度看,因为核向下移动一行在行上就会产生一个输出,核是有高度的,那么移动到最后,核的下端要和输入的下端对齐,那么核在最后占据一个核的高度,在核的上面还有 m − k m-k mk个行,这些行上,核每移动一行都会产生一行输出,最后再加上核在行上的最后一个位置还会产生一个输出,那么在行上就产生 m − k + 1 m-k+1 mk+1个输出

从宽度(列)的角度同理,将会产生 n − l + 1 n-l+1 nl+1个输出

所以步幅为1的情况下将会产生 ( m − k + 1 ) ∗ ( n − l + 1 ) (m-k+1) * (n-l+1) (mk+1)(nl+1)个输出

考虑步幅情况下的计算


假设
输入: X m ∗ n X_{m*n} Xmn
核大小: k ∗ l k*l kl
步幅: S r ( 行 ) S_r(行) Sr() , S c ( 列 ) S_c(列) Sc()

与步幅为1思路相同,只不过这里步幅改变,从行来看,我们仍然在最后一个位置留下一个核的高度,那么还剩下 m − k m-k mk行,然后在这一步我们需要注意与步幅为1不同的是:这里每移动一个行步幅才在行上产生一个输出,那么上面部分将会产生 ⌊ ( m − k ) / S r ⌋ \lfloor (m-k) / S_r \rfloor ⌊(mk)/Sr 个输出,这里为什么要用向下去取整呢,因为当 m − k m-k mk没办法被 S r S_r Sr整除时,剩下的显然没办法进行互相关运算,所以只能用向下取整。注意我们最后还有一个核的高度,所以还需要加上一个步幅,最终输出的行数为 ⌊ ( m − k + S r ) / S r ⌋ \lfloor (m-k+S_r) / S_r \rfloor ⌊(mk+Sr)/Sr

同理,在列(宽度)上最终输出就应该为 ⌊ ( n − l + S c ) / S c ⌋ \lfloor (n-l+S_c) / S_c \rfloor ⌊(nl+Sc)/Sc

所以在上述步幅情况下的卷积层输出应该为: ⌊ ( m − k + S r ) / S r ⌋ ∗ ⌊ ( n − l + S c ) / S c ⌋ \lfloor (m-k+S_r) / S_r \rfloor * \lfloor (n-l+S_c) / S_c \rfloor ⌊(mk+Sr)/Sr⌊(nl+Sc)/Sc

但是在步幅不为1的情况下用上面的方法理解是有bug的,因为移动是依次移动的,不是像理解那样直接在最后先预留一个核的位置,所以有剩的不能进行互相关运算的也应该留在最后,而不是 m − k m-k mk的位置,此外此处并没有考虑填充。


总结

本人于学习过程中记录下自己的理解,如果对上述问题理解有误,请大家批评指正!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值