图像大小为 [m,32,32,3](m = 训练样本数)
过滤器大小为 [3,3,3,10]
步幅 = 1
填充 = 无
如果我使用 tensorflow.nn.conv2d 对它进行卷积,那么根据公式,输出形状应该是这个
out ={ ( 32 - 3 + 2*(0) ) / 1 }+ 1 = 30
所以输出大小应该是 [m, 30, 30, 10] 但我得到的输出形状是 [m, 32, 32, 10]
为什么会这样?
# convolution layer 1
c1 = tf.nn.conv2d(x_train, w1, strides = [1,1,1,1], padding = 'SAME')
print('c1 size: ', c1.shape)
# activation function for c1: relu
r1 = tf.nn.relu(c1)
# maxpooling
p1 = tf.nn.max_pool(r1, ksize = [1,2,2,1], strides = [1,2,2,1], padding = 'SAME')
padding = "SAME" 表示:
input = [1, 2, 3, 4, 5, 6, 7, 8]
filter size = [1, 3]
stride = [2]
so input to filter will be [[1, 2, 3], [3, 4, 5], [5, 6, 7], [7, 8, 0]]
padding = "VALID" 表示:
input = [1, 2, 3, 4, 5, 6, 7, 8]
filter size = [1, 3]
stride = [2]
so input to filter will be [[1, 2, 3], [3, 4, 5], [5, 6, 7]]
在这种情况下,最后一个像素被丢弃了。
所以填充“VALID”会给你你期望的输出。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句