池化和卷积类似,但是计算方法不一样,分为最大池化和平均池化,就是对所有相应位置的数求最大或平均值,一般用来降维,将高和宽。而1*1卷积中的降维降的是通道数的维度。
池化的参数为0,就是不用参数
下采样:通过池化等方式减少特征图的宽和高就叫下采样。
最大池化代码实现
def pooling(feature_map, size=2, stride=2):
"""
最大池化实现
:param feature_map: 特征图
:param size: 池化大小
:param stride: 步长
:return:
"""
# 1、准备池化层的输出初始化
pool_out = np.zeros((np.uint16((feature_map.shape[0] - size + 1) / stride + 1),
np.uint16((feature_map.shape[1] - size + 1) / stride + 1),
feature_map.shape[-1]))
# 2、循环取出每个方格当中的最大值作为新的输出
for map_num in range(feature_map.shape[-1]):
# 获取左上角横初始下标
r2 = 0
for r in np.arange(0, feature_map.shape[0] - size + 1, stride):
# 获取左上角纵初始下标
c2 = 0
for c in np.arange(0, feature_map.shape[1] - size + 1, stride):
pool_out[r2, c2, map_num] = np.max([feature_map[r:r + size, c:c + size, map_num]])
c2 = c2 + 1
r2 = r2 + 1
return pool_out