如何使用tf.nn.avg_pool获得与tf.reduce_mean相同的结果

时间:2018-06-23 07:25:26

标签: tensorflow

在以下代码中,我想使用tf.nn.avg_pool来获得与使用tf.reduce_mean时相同的结果。但是如何修复tf.nn.avg_pool的参数以获得相似的结果?

input = tf.Variable(tf.random_normal([2,16,16,200]))
filter= tf.Variable(tf.random_normal([16,16,200,1]))
def depth_conv2d(input):
    return tf.nn.depthwise_conv2d(input,filter, strides=[1,4,4,1],padding= 'VALID')

depth_conv_out = depth_conv2d(input)

Relu = tf.nn.relu(depth_conv_out)
avg_pooling = tf.reduce_mean(Relu, reduction_indices=[3], keep_dims=True) 
sess = tf. InteractiveSession()
sess.run(tf.initialize_all_variables())

print("convolution result")
print (depth_conv_out.get_shape())
print ("Relu result")
print (Relu.eval())
print(Relu.get_shape())
print ("Average pooling")
print (avg_pooling.get_shape())

1 个答案:

答案 0 :(得分:1)

虽然tf.nn.avg_pool上的文档未明确说明它是否支持按批或渠道维度进行池化,但tf.nn.pool上的文档(如果{{1}设置为tf.nn.avg_pool)明确指出:

  

pooling_type:如果data_format不以“ NC”开头(默认值),则为'AVG'的N + 2阶张量,如果data_format以“ NC”开头则为input。合并只会发生在整个空间维度上

但是,您可以将形状为[batch_size] + input_spatial_shape + [num_channels]的张量转换为[batch_size, num_channels] + input_spatial_shape,执行平均池化,然后将其转换回原始格式,如下例所示:

[batch_size, height, width, num_channels]