tensorflow
个中的tf.nn.max_pool
个中的"相同"和"有效"填充有什么区别?
在我看来,"有效"意味着当我们使用max pool时,边缘外不会有零填充.
根据A guide to convolution arithmetic for deep learning,它说在泳池操作员中不会有填充,也就是说,只使用tensorflow
的"有效"即可.
但是tensorflow
的最大台球的"相同"填充物是什么呢?
tensorflow
个中的tf.nn.max_pool
个中的"相同"和"有效"填充有什么区别?
在我看来,"有效"意味着当我们使用max pool时,边缘外不会有零填充.
根据A guide to convolution arithmetic for deep learning,它说在泳池操作员中不会有填充,也就是说,只使用tensorflow
的"有效"即可.
但是tensorflow
的最大台球的"相同"填充物是什么呢?
我将举一个例子来说明:
x
:形状[2,3]的输入图像,1通道valid_pad
:具有2x2内核、跨度2和有效填充的最大池.same_pad
:max pool,2x2内核,跨步2和相同的填充(这是classic条路要走)输出形状为:
valid_pad
:此处没有填充,因此输出形状为[1,1]same_pad
:在这里,我们将图像填充到形状[2,4](使用-inf
,然后应用最大池),因此输出形状为[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.]