一、作用和优点
首次提出全局平均池化概念的论文是:Network In Network, 作用和优点都讲的很清楚。
在这里插入图片描述:
- 作用:
如果要预测K个类别,在卷积特征抽取部分的最后一层卷积层,就会生成K个特征图,然后通过全局平均池化就可以得到 K个1×1的特征图,将这些1×1的特征图输入到softmax layer之后,每一个输出结果代表着这K个类别的概率(或置信度 confidence),起到取代全连接层的效果。 - 优点:
- 和全连接层相比,使用全局平均池化技术,对于建立特征图和类别之间的关系,是一种更朴素的卷积结构选择。
- 全局平均池化层不需要参数,避免在该层产生过拟合。
- 全局平均池化对空间信息进行求和,对输入的空间变化的鲁棒性更强。
二、Tensorflow实现
有两种方法:
一方法,这里用的tf.nn。可以用tf.layers代替。
p05 = tf.nn.avg_pool2d(conv10,ksize=[1,conv10.get_shape().as_list()[1],conv10.get_shape().as_list()[1],1],strides=[1,1,1,1],padding=VALID',name='GAP')
二方法
p05 = tf.reduce_mean(conv10, [1, 2], keep_dims=True, name='GAP')
我更喜欢第一种,在量化模型时候,第二种可能会报错。不去深究原因,只能说tf某些东西做的还不成熟,比如pruning模块里面。
参考文献
[1]tensorflow 实现全局平均池化
[2]pytorch 学习 | 全局平均池化 global average pooling 实现 和作用优点解析
[3]全局平均池化(Global Average Pooling)
[4]Network In Network