小编Yon*_*ang的帖子

为什么全局平均池化在 ResNet 中起作用

最近,我开始了一个关于分类的项目,使用了一个非常浅的 ResNet。该模型只有 10 次转换。层,然后在 softmax 层之前连接一个全局平均池化层。

性能符合我的预期 --- 93%(是的,没关系)。

但是,由于某些原因,我需要替换 Global avg pooling 层。

我尝试了以下方法:

(给定这一层的输入形状[-1, 128, 1, 32],tensorflow形式)

  1. 全局最大池化层。但得到了 85% 的 ACC

  2. 指数移动平均线。但得到了 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])
    
    Run Code Online (Sandbox Code Playgroud)
  3. 将输入分成 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)
    
    Run Code Online (Sandbox Code Playgroud)
  4. 平均最后一个通道。[-1, 128, 1, 32] --> …

python deep-learning conv-neural-network tensorflow resnet

2
推荐指数
1
解决办法
1934
查看次数