当前位置:   article > 正文

【TensorFlow基础】TensorFlow中函数conv2d参数stride,padding的理解以及padding模式SAME,VALID的详细说明_tensorflow中conv2d可以使用stride=2和padding='same

tensorflow中conv2d可以使用stride=2和padding='same

TensorFlow中函数conv2d主要实现了输入张量与设定卷积核的卷积操作,其函数形式如下:

  1. tf.nn.conv2d(
  2. input,
  3. filter,
  4. strides,
  5. padding,
  6. use_cudnn_on_gpu=True,
  7. data_format='NHWC',
  8. dilations=[1, 1, 1, 1],
  9. name=None
  10. )

 

input,filter自然是设定的输入和卷积核了,参数strides,padding分别决定了卷积操作中滑动步长和图像边沿填充的方式。

看下strides官方解释:

其为长度为4的一阶张量,并且要求strides[0]=strides[3]=1,strides[1],strides[2]决定卷积核在输入图像in_hight,in_width方向的滑动步长,而通过图像卷积的过程可以知道,卷积核的大小和图像的大小有时候比不是完全匹配,比如图像大小为5x5,卷积核大小为3x3,滑动步长为3时,会涉及到图像卷积过程中边界如何填充的问题,padding参数的两个值SAME,VALID决定了其填充方式,通过代码验证其不同的工作方式:

padding = VALID:

变成了5x5,结果如下:

 

这种模式下,对于原始图像与卷积核不匹配的情况,就要对图像的边界做一些填充,具体的填充方式和所差的元素个数有关,一种一种试一试:

同样是产生28x28的全1图像,然后用全1的5x5卷积核做卷积,那每个方向差两个元素,通过计算结果可以看到是在每个方向的两端各补了一个0,形成30x30,四周都是0的图像。那如果差1个元素呢?

比较上述结果第一行,第一列不同,其余相同,那么就是在每行每列的最后补了一个0。继续差三个元素呢?

同样是比较结果,通过元素的值可以推测出其是在每个方向的开头补了一个0,最后补了两个0,那么差4个元素呢?

结果显示了什么?首尾各补两个0。那么通过上述验证是不是得到了些规律呢?可见当差偶数个元素是首尾各补一半,差奇数个时前边补奇数个,后边补偶数个。当然具体差多少元素和选定的卷积核大小以及滑动步长密切相关。那么滑动步长又有哪些影响呢?如果改成滑动步长为1,看看验证的结果:

再把padding改为 VALID瞧瞧:

 

总结一下看到了什么,卷积核大小,滑动步长直接影响最后的卷积结果的大小,且padding为SAME模式时,先对原图像进行填充,再做卷积,填充值须根据卷积核大小及滑动步长决定,当滑动步长大于1时:填充数=K-I%S(K:卷积核边长,I:输入图像边长,S:滑动步长);能除尽时,填充数=K-S(K:卷积核边长,I:输入图像边长,S:滑动步长);滑动步长为1时,直接卷积核边长减1,而padding为VALID模式时,很简单粗暴直接从原始图像的首段开始卷积,到最后不能匹配卷积核的部分直接舍去,至于两种模式会有怎样的差别,后续可进行进一步的验证。

 

总结一下看到了什么,卷积核大小,滑动步长直接影响最后的卷积结果的大小,且padding为SAME模式时,先对原图像进行填充,再做卷积,填充值须根据卷积核大小及滑动步长决定,

I%S!=0

填充数=K-I%S(K:卷积核边长,I:输入图像边长,S:滑动步长)

I%S==0

填充数=K-S(K:卷积核边长,I:输入图像边长,S:滑动步长)

 

转载自:https://blog.csdn.net/qq_17272679/article/details/79591540

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/在线问答5/article/detail/750857
推荐阅读
相关标签
  

闽ICP备14008679号