史上对tensorflow卷积神经网络中的padding参数最详细解释!

本文详细解析了在TensorFlow中使用卷积神经网络时,卷积层和池化层的padding参数如何影响输出大小。特别是针对padding取值为‘VALID’和‘SAME’时,对输入进行填充的不同策略,以及在不同步长下如何自动计算填充值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

当使用tensorflow创建卷积神经网络时,肯定要用到卷积层和池化层,tendorflow关于建立卷积层和池化层的API都有padding这个参数,如下所示:

- tf.nn.conv2d(input,filter,strides,padding)

- tf.nn.max_pool(input,ksize,strides,padding)

padding有两种可选值:‘VALID’‘SAME’

取值为‘VALID’时padding=0,并不会对输入(input)做填充;

取值为‘SAME’时padding>0,将会对输入(input)做填充,填充值都是0值。

下面我将分别对卷积和池化中padding取值为‘VALID’‘SAME’的区别做详细的解释。

---------------------------------------------------------------------------------------------------------

  • 卷积 tf.nn.conv2d(input,filter,strides,padding)

     

在tf.nn.conv2d中,padding是在图片周围做填充

  •  padding='VALID'时不会对图片做填充;

捕获1.PNG

  • padding='SAME'时情况比较特殊,注意!,这里还要分为两种情况stride=1stride>1

   1.当且仅当stride=1时,padding='SAME'意味着卷积后的输出与输入size保持一致。例如input的size是5×5,kernel(filter)的size是3×3,令padding='SAME'时(此时padding=1,即在input周围填充了一圈0),output的size将会与input的size保持一致为5×5。

捕获2.PNG

当我们使用tensorflow时,取padding='SAME'时,它自动为我们算出padding的值。既然是详解,那么我们来算一下取padding='SAME'时,padding的值应该取几?先说结论:假如kernel的size是k×k,那么padding=(k-1)/2。

解释:o=(i+2p-k+1)

o为output的size,i为input的size,k为kernal的size,p为padding的取值。以上图为例,i=5,padding=1,k=3,kernel还要向右移动4步加上开始总共生成5个像素(即output的第一行),o就等于5。(如果对卷积过程比较熟悉应该不难理解)

  2.当stride>1时,还是直接上公式:

o=((i+2p-k)/s+1)

是不是发现s=1就是上面的公式?当stride>1时,p的取值是能使(i+2p-k)能被s整除的最小值(p>k/2)。

以Alexnet的输入层(227×227)到第二层(55×55)为例子,k=11,stride=4,padding='VALID';

假如我们令padding='SAME',我们看一下输出层size是多少?

能使(227+2p-11)被4整除的最小p值是4,所以o=((227+2×4-11)/4+1)=57,这时第二层的size就变成了57×57。代码可以在这里获取,有兴趣的可以看一下。

---------------------------------------------------------------------------------------------------------------------

  • 池化 tf.nn.max_pool(input,ksize,strides,padding)

对于tf.nn.max_pool来说,padding='SAME'和'VALID'的区别我们来举例说明:

  • 输入x: 输入图像的shape 是 [2,3], 1个channel

  • valid_pad:  kernel的size为2×2, stride 2 ,padding='VALID'.

  • same_pad:  kernel的size为2×2, stride 2 ,padding='VALID'

输出结果:

 

  • valid_pad: 输出的shape 是 [1, 1]

  • same_pad: 这里我们将会把x的shape填充为 shape [2, 4] (with -inf and then apply max pool), 所以最终输出的 shape 是 [1, 2]

废话不说,上代码:

 


呼~,终于结束了,参考资料在下面:

What does the "same" padding parameter in convolution mean in TensorFlow?

what is the behavior of SAME padding when stride is greater than 1?

What is the difference between 'SAME' and 'VALID' padding in tf.nn.max_pool of tensorflow?

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值