【发布时间】:2020-02-29 13:36:33
【问题描述】:
最近,我开始了一个关于分类的项目,使用了一个非常浅的 ResNet。 该模型只有 10 个转换。层,然后在 softmax 层之前连接一个 Global avg pooling 层。
性能和我的预期一样好——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,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% 左右。
我很困惑,为什么全局平均池可以很好地工作? 还有没有其他方法可以替代?
【问题讨论】:
标签: python tensorflow deep-learning conv-neural-network resnet