1
举个例子: x:形状为[2,3],通道为1的输入图像 valid_pad:具有2x2内核,步长为2和valid填充的最大池化。 same_pad:具有2x2内核,步长为2和same填充的最大池化(这是经典的处理方式)
输出形状为:
valid_pad:没有填充,因此输出形状为[1,1]
same_pad:将图像填充为[2,4]形状(使用-inf
将图像形状填充到[2,4],然后应用最大池),输出形状为[1,2]
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.]
借助下面这组图片可以直观地理解:
padding方式为“valid”时如第一张图所示,滤波器窗口保持在图像内部滑动。
padding方式为“same”时如第三张图所示,输出同输入大小相同。
收藏