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)

代码解释:

  1. 输入特征图: x 表示输入的特征图,形状为 [64, 512, 96, 32],其中:

    • 64 表示批次大小 (batch size)
    • 512 表示特征图的通道数 (channels)
    • 96 和 32 分别表示特征图的高度和宽度
  2. 池化操作:

    • pool_size 表示池化窗口的大小,这里设置为 (8, 6)
    • stride 表示池化窗口的步长,这里设置为 (12, 16)
    • out_hout_w 计算输出特征图的高度和宽度
    • out 初始化一个形状为 [64, 512, 12, 8] 的数组,用于存储池化后的结果
  3. 循环遍历: 代码使用双层循环遍历输出特征图的每个位置,并在每个位置执行最大池化操作。

    • pool_region 提取当前位置的池化窗口区域
    • pool_out 计算池化窗口区域内的最大值
    • out[:, :, i, j] = pool_out 将最大值存储到输出特征图中
  4. 输出特征图: 代码打印输出特征图的形状,结果为 (64, 512, 12, 8)。

注意: 此代码实现了最大池化操作,您也可以根据需要修改代码实现平均池化操作。

Python 实现最大池化操作:将 [64, 512, 96, 32] 池化为 [64, 1024, 12, 8]

原文地址: https://www.cveoy.top/t/topic/mZCn 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录