当前位置:   article > 正文

tf padding方式和输出特征图大小关系_padding='same

padding='same

一、基本公式(普通卷积)

输出大小 = (输入大小-卷积核大小+2*填充大小)/步长+1(向下取整)

二、普通卷积

padding=‘SAME’:输出大小=输入大小/步长(向上取整)(SAME方式时padding大小是由tf自动决定,一般都是将输入大小填充到步长的整数倍)
padding=‘VALID’:输出大小=(输入大小-卷积核大小+1)/步长(即无填充时的最基本公式)
示例如下:

# SAME方式
x = tf.random.normal([2,5,5,3])
w = tf.random.normal([3,3,3,4])
out = tf.nn.conv2d(x,w,strides=3,padding='SAME')
# out [4]:TensorShape([2, 2, 2, 4])(5/3向上取整为2)
# 也可以理解为padding为1,使得5+1变为6,3的整数倍,(5-3+2*1)/3+1=2


# VALID方式
x = tf.random.normal([2,5,5,3])
w = tf.random.normal([3,3,3,4])
out = tf.nn.conv2d(x,w,strides=2,padding='VALID')
# out:TensorShape([2, 2, 2, 4])((5-2+1)/2=2)
# 也可以理解为padding为0,(5-3+2*0)/2+1=2
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

三、转置卷积

padding=‘VALID’:(输入大小-1)x步长+卷积核大小
padding=‘SAME’:输入大小x步长
PS:同样也可以利用基本公式计算,因为转置卷积相当于普通卷积的逆过程,所以只需要将基本公式里的输入大小换成输出大小,公式里的输出大小换成输入大小,再移项即可,但是这样计算不方便且SAME方式下的填充大小还需要根据你设置的output_shape大小来自己推断很麻烦
另外,output_shape大小不能随意设置,必须是((输入大小-1)x步长,输入大小x步长](左开右闭)
没有特殊需要,output_shape大小就直接设置成上面公式计算出来的数值就行
示例如下:

# VALID方式
x = tf.range(16)+1
x = tf.reshape(x,[1,4,4,1])
x = tf.cast(x, tf.float32)
# 创建3x3 卷积核
w = tf.constant([[-1,2,-3.],[4,-5,6],[-7,8,-9]])
w = tf.expand_dims(w,axis=2)
w = tf.expand_dims(w,axis=3)
# 普通卷积运算
out = tf.nn.conv2d(x,w,strides=1,padding='VALID')
xx = tf.nn.conv2d_transpose(out, w, strides=3, padding='VALID',output_shape=[1,6,6,1])
# out:TensorShape([1, 2, 2, 1])(4-3+1)/1=2)
# xx:TensorShape([1, 6, 6, 1])((2-1)*3+3=6)

# SAME方式
x = tf.range(16)+1
x = tf.reshape(x,[1,4,4,1])
x = tf.cast(x, tf.float32)
# 创建3x3 卷积核
w = tf.constant([[-1,2,-3.],[4,-5,6],[-7,8,-9]])
w = tf.expand_dims(w,axis=2)
w = tf.expand_dims(w,axis=3)
# 普通卷积运算
out = tf.nn.conv2d(x,w,strides=1,padding='VALID')
xx = tf.nn.conv2d_transpose(out, w, strides=3, padding='SAME',output_shape=[1,6,6,1])
# out:TensorShape([1, 2, 2, 1])(4-3+1)/1=2)
# xx:TensorShape([1, 6, 6, 1])(2*3=6)
# output_shape也可以设置成[1,4,4,1],[1,5,5,1],范围为(3,6]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28

参考文献

[1]Tensorflow深度学习
[2]卷积层输出大小尺寸计算及padding为 “SAME” 和 “VALID”的计算

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

闽ICP备14008679号