Inception v3 示例中的 GlobalAveragePooling2D

数据挖掘 Python 喀拉斯
2022-02-23 15:19:45

我是 Keras 的完整初学者。https://keras.io/applications/的 Inception v3 示例中

# create the base pre-trained model
base_model = InceptionV3(weights='imagenet', include_top=False)

# add a global spatial average pooling layer
x = base_model.output
x = GlobalAveragePooling2D()(x)
# let's add a fully-connected layer
x = Dense(1024, activation='relu')(x)
# and a logistic layer -- let's say we have 200 classes
predictions = Dense(200, activation='softmax')(x)

作为第一步,它添加了一个 GlobalAveragePooling2D 层,描述为:

空间数据的全局平均池化操作。

GlobalAveragePooling2D 做了什么以及为什么该示例使用它而不是 Flatten 之类的东西?哪些信息是平均的?

1个回答

在 GAP 之前,先将张量展平,然后在模型中添加一些全连接层。问题是模型中的一堆参数最终被归因于密集层,并可能导致过度拟合。一个自然的解决方案是添加 dropout 来帮助调节它。

然而几年前,建立全球平均池的想法开始发挥作用。GAP 可以被视为整个扁平化 FC Dropout 范式的替代方案。GAP 通过进行极端形式的归约来帮助防止过度拟合。给定一个 HXWXD 张量,GAP 会将 HXW 特征平均为一个数字,并将张量减少为 1 X 1 XD 张量。

原始论文简单地应用了 GAP,然后应用了 softmax。然而,现在常见的是 GAP 后跟 FC 层。