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

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

当使用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]

废话不说,上代码:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章