Python 实现最大池化操作:将 [64, 512, 96, 32] 池化为 [64, 1024, 12, 8]
Python 实现最大池化操作:将 [64, 512, 96, 32] 池化为 [64, 1024, 12, 8]
本文介绍如何使用 Python 代码实现最大池化操作,将形状为 [64, 512, 96, 32] 的特征图池化为 [64, 1024, 12, 8]。
import numpy as np
# 输入特征图
x = np.random.rand(64, 512, 96, 32)
# 池化操作
pool_size = (8, 6)
stride = (12, 16)
out_h = (x.shape[2] - pool_size[0]) // stride[0] + 1
out_w = (x.shape[3] - pool_size[1]) // stride[1] + 1
out = np.zeros((x.shape[0], x.shape[1], out_h, out_w))
for i in range(out_h):
for j in range(out_w):
pool_region = x[:, :, i*stride[0]:i*stride[0]+pool_size[0], j*stride[1]:j*stride[1]+pool_size[1]]
pool_out = np.max(pool_region, axis=(2,3))
out[:, :, i, j] = pool_out
# 输出特征图
print(out.shape) # (64, 512, 12, 8)
代码解释:
-
输入特征图:
x表示输入的特征图,形状为 [64, 512, 96, 32],其中:- 64 表示批次大小 (batch size)
- 512 表示特征图的通道数 (channels)
- 96 和 32 分别表示特征图的高度和宽度
-
池化操作:
pool_size表示池化窗口的大小,这里设置为 (8, 6)stride表示池化窗口的步长,这里设置为 (12, 16)out_h和out_w计算输出特征图的高度和宽度out初始化一个形状为 [64, 512, 12, 8] 的数组,用于存储池化后的结果
-
循环遍历: 代码使用双层循环遍历输出特征图的每个位置,并在每个位置执行最大池化操作。
pool_region提取当前位置的池化窗口区域pool_out计算池化窗口区域内的最大值out[:, :, i, j] = pool_out将最大值存储到输出特征图中
-
输出特征图: 代码打印输出特征图的形状,结果为 (64, 512, 12, 8)。
注意: 此代码实现了最大池化操作,您也可以根据需要修改代码实现平均池化操作。
原文地址: https://www.cveoy.top/t/topic/mZCn 著作权归作者所有。请勿转载和采集!