9

我试图跨越通道维度,以下代码表现出令人惊讶的行为。我的期望是,当输入完全相同的参数时tf.nn.max_pool,应该产生相同形状的张量。tf.nn.avg_pool不是这种情况。

import tensorflow as tf

x = tf.get_variable('x', shape=(100, 32, 32, 64),
        initializer=tf.constant_initializer(5), dtype=tf.float32)
ksize = (1, 2, 2, 2)
strides = (1, 2, 2, 2)
max_pool = tf.nn.max_pool(x, ksize, strides, padding='SAME')
avg_pool = tf.nn.avg_pool(x, ksize, strides, padding='SAME')
print(max_pool.shape)
print(avg_pool.shape)

这打印

$ python ex04/mini.py 
(100, 16, 16, 32)
(100, 16, 16, 64)

显然,我误解了一些东西。

4

2 回答 2

4

链接https://github.com/Hvass-Labs/TensorFlow-Tutorials/issues/19指出:

第一个和最后一个步幅必须始终为 1,因为第一个用于图像编号,最后一个用于输入通道。

于 2017-11-24T11:10:40.983 回答
0

事实证明,这确实是一个错误。 https://github.com/tensorflow/tensorflow/issues/14886#issuecomment-352934112

于 2017-12-20T10:24:11.550 回答