在tensorflow教程的Densely Connected Layer部分中,它说图像大小在经过处理后为 7 x 7 。我尝试了代码,看来这些参数有效。
但是我不知道如何获得 7 x 7 尺寸。我明白那个:
max_pool_2x2
函数会将两个图像的尺寸减小4倍,因此在第一次合并操作之后,图像大小为 7 x 7 在第二个conv层中,还有另一个
max_pool_2x2
函数调用,因此我认为图像大小应再减小4倍。但是实际上没有。 我错了哪一步?
最佳答案
您还需要知道最大池和卷积的步幅。
def conv2d(x, W):
return tf.nn.conv2d(x, W, strides=[1, 1, 1, 1], padding='SAME')
def max_pool_2x2(x):
return tf.nn.max_pool(x, ksize=[1, 2, 2, 1],
strides=[1, 2, 2, 1], padding='SAME')
在这里,我们可以看到卷积的步幅为1,最大池的步幅为2。如何看待最大池,它需要2x2的框,并在图像上滑动,每次取最大值超过4像素。如果跨度为2,则每次移动都需要2步!图像大小应减少2倍,而不是4倍。
换句话说,一张最大池为2x2,跨度为2的28x28图片将变为14x14。另一个最大池2x2和跨度2会将其减小到7x7。
为了进一步说明我的观点,让我们以最大池为2x2并跨步为1的情况为例。如果不填充图像,它将在最大池后变成27x27的图像。
这是更完整答案的图片: