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

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

表现好于我的期望--- 93%(是的,还可以)。

但是,由于某些原因,我需要替换全局平均池化层。

我尝试了以下方法:

(鉴于此层的输入形状[-1,128,1,32],张量流形式)

  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])
    
  3. 将输入拆分为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)
    
  4. 平均最后一个频道。 [-1,128,1,32]-> [-1,128],不起作用                                        ^

  5. 使用转化1个内核的内核层。这样,输出形状为[-1、128、1、1]。但没有用,大约25%。

我很困惑,为什么全球平均池可以很好地发挥作用? 还有其他替代方法吗?

c139261 回答:为什么全球平均池在ResNet中起作用

与完全连接的最终层范例相比,全局平均池具有以下优势:

  1. 从模型中删除大量可训练的参数。完全连接或密集的层具有很多参数。将7 x 7 x 64 CNN输出扁平化并馈入500个节点的密集层后,将产生156万个权重,需要进行训练。删除这些图层可加快模型的训练速度。
  2. 消除所有这些可训练参数也减少了过度拟合的趋势,这需要通过使用辍学在完全连接的层中进行管理。
  3. 作者在original paper中提出,删除完全连接的分类层将迫使特征图与分类类别更紧密地关联-从而使每个特征图成为一种“类别置信度图”。 / li> 最后,作者还认为,由于对特征图进行平均运算,这使得该模型对数据中的空间转换更加健壮。换句话说,只要必要的特征被包含在特征图中或在某处被激活,它的平均操作仍将被“拾取”。
本文链接:https://www.f2er.com/3168074.html

大家都在问