卷积运算中的两种padding的取值,VALID和SAME

模板来源于(https://blog.csdn.net/wuzqchom/article/details/74785643) 加入了一些自己的理解

在用tensorflow写CNN的时候,调用卷积核api的时候,会有填padding方式的参数,找到源码中的函数定义如下(max pooling也是一样):

def conv2d(input, filter, strides, padding, use_cudnn_on_gpu=None,
           data_format=None, name=None)


源码中对于padding参数的说明如下:

padding: A `string` from: `"SAME", "VALID"`.
      The type of padding algorithm to use.

源码中说明padding可以用SAMEVALID两种方式,但是对于这两种方式具体是什么并没有多加说明。

我们来对这两种用法进行分析:(代码如下)

import tensorflow as tf 
x0 = tf.constant([[1., 2., 3.],
                 [4., 5., 6.]])

x = tf.reshape(x0,[1,2,3,1])

valid_pad = tf.nn.max_pool(x,[1,2,2,1],[1,2,2,1],padding='VALID')

same_pad = tf.nn.max_pool(x,[1,2,2,1],[1,2,2,1],padding='SAME')

print(valid_pad.get_shape())
print(same_pad.get_shape())

with tf.Session() as sess:
    print(sess.run(valid_pad))
    print('--------------------------')
    print(sess.run(same_pad))

我们来看一下输出的结果


(1, 1, 1, 1)
(1, 1, 2, 1)
[[[[5.]]]]
--------------------------
[[[[5.]
   [6.]]]]

使用VALID模式,则我们的输出为(1x1)

使用SAME模式,得到的输出则是(1x2)

可以看出SAME的填充方式是比VALID的填充方式多了一列。
让我们来看看变量x xx是一个2×3 2\times32×3的矩阵,max pooling窗口为2×2 2\times22×2,两个维度的步长strides=2 strides=2strides=2。
第一次由于窗口可以覆盖,橙色区域做max pooling,没什么问题,如下:

 

 


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值