一. 池化:

padding="SAME"
import tensorflow as tf
import numpy as np
a = [[[[1,3,2],
[4,6,5],
[7,9,8]]]]
a = np.transpose(a, [1, 2, 3, 0])
print(a.shape)
b = tf.nn.max_pool(a, [1, 2, 2, 1], [1, 2, 2, 1], padding="SAME")
sess = tf.Session()
t = sess.run(b)
print(t.shape)
print(t)
sess.close()
结果

padding="VALID"
结果

二. 卷积

padding="SAME"
import tensorflow as tf
import numpy as np
a = [[[[1,3,2],
[4,6,5],
[7,9,8]]]]
a = np.transpose(a, [1, 2, 3, 0])
a = a.astype(dtype="float32")
filter = tf.Variable(tf.random_normal([2, 2, 1, 3]))
sess = tf.Session()
sess.run(tf.global_variables_initializer())
print(a.shape)
b = tf.nn.conv2d(a, filter, [1, 2, 2, 1], padding="SAME")
t = sess.run(b)
print(t.shape)
print(t)
sess.close()
结果:

padding="VALID"
结果:

三. 解释原因
池化与卷积函数的padding作用原理和效果是一样的(实验验证得出)。
模板在滑动时,可能存在覆盖不完全的地方,就比如用2*2的模板,对于VALID模式和SAME模式就不一样,SAME模式会补全橙色部分,而VALID模式就不会补全了,就把多余的地方全都舍去了。


若padding=“SAME", 原始数据(input)的height*width = h*w。且 strides=[1, a, b, 1]。则经过卷积或池化之后输出的数据height*width=ceil(h除以a得到的浮点数) * ceil(w除以b得到的浮点数)。其中ceil()是向上取整。

博客主要介绍了池化和卷积的padding模式,包括padding=\SAME\和padding=\VALID\的结果,并解释了原因。指出池化与卷积函数的padding作用原理和效果相同,还给出了padding=“SAME”时经过卷积或池化后输出数据的计算公式。
1128

被折叠的 条评论
为什么被折叠?



