在以下代码中,我想使用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())
答案 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]