最近,我使用一个很浅的Resnet开始了一个有关分类的项目。 该模型只有10次转化。层,然后在softmax层之前连接全局avg池层。
表现好于我的期望--- 93%(是的,还可以)。
但是,由于某些原因,我需要替换全局平均池化层。
我尝试了以下方法:
(鉴于此层的输入形状[-1,128,1,32],张量流形式)
-
全局最大池化层。但获得了85%的acc
-
指数移动平均线。但是得到了12%(几乎没有用)
split_list = tf.split(input,128,axis=1) avg_pool = split_list[0] beta = 0.5 for i in range(1,128): avg_pool = beta*split_list[i] + (1-beta)*avg_pool avg_pool = tf.reshape(avg_pool,[-1,32])
-
将输入拆分为4个部分,avg_pool每个部分,最后将它们连接起来。 但得到了75%
split_shape = [32,32,32] split_list = tf.split(input,split_shape,axis=1) for i in range(len(split_shape)): split_list[i] = tf.keras.layers.GlobalMaxPooling2D()(split_list[i]) avg_pool = tf.concat(split_list,axis=1)
-
平均最后一个频道。 [-1,128,1,32]-> [-1,128],不起作用 ^
-
使用转化1个内核的内核层。这样,输出形状为[-1、128、1、1]。但没有用,大约25%。
我很困惑,为什么全球平均池可以很好地发挥作用? 还有其他替代方法吗?