### 全局池化层
全局池化层(Global Pooling Layer)是一种池化操作,通常用于卷积神经网络(CNN)中,特别是在图像分类任务中。它的作用是将特征图的空间维度缩小到一个单一的值,即从每个特征图生成一个单一的数值。
#### 常见类型
1. **全局平均池化(Global Average Pooling, GAP)**:
- 对输入特征图的每个通道分别进行平均操作,计算每个通道上的所有值的平均值。
- 结果是一个大小为`(batch_size, channels)`的张量,其中`channels`是特征图的通道数。
- 可以减少模型参数数量,避免过拟合,同时保留全局信息。
2. **全局最大池化(Global Max Pooling, GMP)**:
- 对输入特征图的每个通道分别进行最大值操作,找到每个通道上的最大值。
- 结果也是一个大小为`(batch_size, channels)`的张量。
- 可以捕捉特征图中最显著的特征。
#### 使用场景
1. **分类任务**:
- 在图像分类任务中,全局池化层经常用作卷积层后的最后一层。它将特征图缩小到一维向量,然后连接到全连接层进行分类。
2. **减少参数**:
- 全局池化层可以显著减少模型参数数量,因为它省略了全连接层需要的大量权重。
#### 举例
在Keras中,使用全局平均池化和全局最大池化层的方法如下:
```python
from tensorflow.keras.layers import GlobalAveragePooling2D, GlobalMaxPooling2D
# 假设输入张量的形状为 (batch_size, height, width, channels)
# 使用全局平均池化
x = GlobalAveragePooling2D()(input_tensor)
# 使用全局最大池化
y = GlobalMaxPooling2D()(input_tensor)
```
#### 具体例子
假设输入张量的形状是(channels, height, width):
- 输入张量是(3,4,4),即3个通道,每个通道的大小为4×4。
- 对于每个通道,4×4的所有值会被平均到一个值。
- 输出张量的形状是(3,1,1)。
##### 输入张量:
```
[[[1, 2, 3, 4],
[5, 6, 7, 8],
[9, 10, 11, 12],
[13, 14, 15, 16]],
[[17, 18, 19, 20],
[21, 22, 23, 24],
[25, 26, 27, 28],
[29, 30, 31, 32]],
[[33, 34, 35, 36],
[37, 38, 39, 40],
[41, 42, 43, 44],
[45, 46, 47, 48]]]
```
##### 全局平均池化后的结果:
```
[[[8.5]],
[[24.5]],
[[40.5]]]
```
每个通道的平均值分别是:
- 第一通道:(1+2+3+4+5+6+7+8+9+10+11+12+13+14+15+16)/16 = 8.5
- 第二通道:(17+18+19+20+21+22+23+24+25+26+27+28+29+30+31+32)/16 = 24.5
- 第三通道:(33+34+35+36+37+38+39+40+41+42+43+44+45+46+47+48)/16 = 40.5