TensorFlow中的Padding到底是怎么在填充?

1.结论

在用tf.nn.conv2d()计算卷积的时候突然有一个疑问,当padding=SAME的时候Tensorflow内部到底是这么处理的。网上找了一圈没发现,都是说怎么计算卷积后的尺寸,没办法挨个试了一遍总结了padding的规律。下面先说结论,再说示例。

符号及术语说明:

[]表示取整,如[0.6]=0
⌈⌉表示向上取整,如⌈0.6⌉=1
这里写图片描述

Tensorflow中padding后尺寸的计算公式为:
1.当padding = 'VALID'
h e i g h t = w d i t h = ⌈ W − F + 1 S ⌉ height=wdith=\large{\lceil}\frac{W-F+1}{S}\large\rceil height=wdith=SWF+1

2.当padding = 'SAME'
h e i g h t = w d i t h = ⌈ W S ⌉ height=wdith=\large{\lceil}\frac{W}{S}\large\rceil height=wdith=SW

其中W表示输入的长宽,F表示过滤器的尺寸,s表示步长

结论:

设输入形状为 W × W W\times W W×W,卷积核形状为 F × F F\times F F×F,步长为 S S S;则我们可以算出卷积或者池化后的尺寸为 w = ⌈ W S ⌉ w=\large{\lceil}\frac{W}{S}\large\rceil w=SW,则padding的圈数为:
P = 1 2 ( ( w − 1 ) × s + F − W ) P=\frac{1}{2}((w-1)\times s+F-W) P=21((w1)×s+FW)

以上公式是根据 w = [ W + 2 ∗ P − F S ] + 1 w = [\frac{W+2*P-F}{S}]+1 w=[SW+2PF]+1得出

举个例子:

假如输入为 7 × 7 7\times7 7×7,卷积为 3 × 3 3\times3 3×3, S = 2 S=2 S=2;则卷积后的形状为 4 × 4 4\times4 4×4,那么padding的圈数为 1 2 ( ( 4 − 1 ) × 2 + 3 − 7 ) = 1 \frac{1}{2}((4-1)\times2+3-7)=1 21((41)×2+37)=1

假如输入为 8 × 8 8\times8 8×8,卷积为 3 × 3 3\times3 3×3, S = 2 S=2 S=2;则卷积后的形状为 4 × 4 4\times4 4×4,那么padding的圈数为 1 2 ( ( 4 − 1 ) × 2 + 3 − 8 ) = 0.5 \frac{1}{2}((4-1)\times2+3-8)=0.5 21((41)×2+38)=0.5

2.示例

下图均是根据Tensorflow的计算结果画出的,7x7,3*3,1 分别是输入大小,过滤器大小,步长

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

P = 1 2 ( ( 7 − 1 ) × 1 + 6 − 7 ) = 2.5 P=\frac{1}{2}((7-1)\times 1+6-7)=2.5 P=21((71)×1+67)=2.5

这里写图片描述

P = 1 2 ( ( 4 − 1 ) × 2 + 3 − 8 ) = 0.5 P=\frac{1}{2}((4-1)\times 2+3-8)=0.5 P=21((41)×2+38)=0.5

注:当P包含0.5圈是,TensorFlow中都是在右下角填充

更多内容欢迎扫码关注公众号月来客栈!
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值