2024-04-26 09:17:05 发布
网友
在tensorflow的tf.nn.max_pool中,“相同”和“有效”填充有什么区别?
tensorflow
tf.nn.max_pool
在我看来,'VALID'意味着当我们做max pool时,不会有零填充。
根据A guide to convolution arithmetic for deep learning,它表示pool运算符中不会有填充,即只使用tensorflow的“VALID”。 但是tensorflow中最大池的“相同”填充是什么?
当stride为1时(对于卷积比池更典型),我们可以考虑以下区别:
stride
"SAME"
"VALID"
filter_size - 1
我举一个例子来说明:
x
valid_pad
same_pad
输出形状为:
-inf
x = tf.constant([[1., 2., 3.], [4., 5., 6.]]) x = tf.reshape(x, [1, 2, 3, 1]) # give a shape accepted by tf.nn.max_pool 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') valid_pad.get_shape() == [1, 1, 1, 1] # valid_pad is [5.] same_pad.get_shape() == [1, 1, 2, 1] # same_pad is [5., 6.]
如果您喜欢ascii艺术:
"VALID"=无填充:
inputs: 1 2 3 4 5 6 7 8 9 10 11 (12 13) |________________| dropped |_________________|
"SAME"=零填充:
pad| |pad inputs: 0 |1 2 3 4 5 6 7 8 9 10 11 12 13|0 0 |________________| |_________________| |________________|
在本例中:
注:
编辑:
关于名字:
当
stride
为1时(对于卷积比池更典型),我们可以考虑以下区别:"SAME"
:输出大小与输入大小相同。这需要过滤器窗口滑出输入映射,因此需要填充。"VALID"
:过滤窗口保持在输入映射内的有效位置,因此输出大小缩小filter_size - 1
。不出现填充。我举一个例子来说明:
x
:输入形状[2,3],1通道的图像valid_pad
:具有2x2内核、跨距2和有效填充的最大池。same_pad
:具有2x2内核、跨距2和相同填充的最大池(这是经典的方法)输出形状为:
valid_pad
:这里没有填充,所以输出形状是[1,1]same_pad
:这里,我们将图像填充到形状[2,4]上(使用-inf
),然后应用max pool),因此输出形状为[1,2]如果您喜欢ascii艺术:
"VALID"
=无填充:"SAME"
=零填充:在本例中:
注:
"VALID"
只删除最右边的列(或最下面的行)。"SAME"
尝试左右均匀填充,但是如果要添加的列的数量是奇数,它会将额外的列添加到右侧,就像本例中的情况一样(相同的逻辑垂直应用:底部可能有额外的一行零)。编辑:
关于名字:
"SAME"
填充时,如果使用步幅为1,则层的输出将具有与其输入相同的空间维度。"VALID"
填充,就没有“组合”填充输入。该层仅使用有效的输入数据。相关问题 更多 >
编程相关推荐