← Back to Index
Research & Engineering Archive

D2L 6.5 Pooling Layer

By Jingnan Huang · March 31, 2025 · 911 Words

Last Edit: 3/31/25

在处理图像的时候,希望逐渐扩大 Layer 的 Receptive Field,这是因为学习任务通常会和全局的图像相关,如“图像是否包含某个物体?”,所以需要逐渐汇集信息到最后一层时包含整个图像

而在逐步汇聚的时候,Representation 特征图会变得更加粗略,但是这些图在粗略的同时已经保存饿了 Convolutional Layer 中的关键特征优势了,所以即使没有关注局部细节,但是有用的特征已经被保存下来了

Pooling Layer
#

6.5.1 Maximum & Average Pooling Layer
#

image.png

import torch
from torch import nn
from d2l import torch as d2l

# 定义二维汇聚函数
def pool2d(X, pool_size, mode='max'):
    # 拆解汇聚窗口的高和宽
    p_h, p_w = pool_size

    # 初始化输出张量 Y,大小为输入尺寸减去窗口尺寸加 1(假设步幅为 1)
    Y = torch.zeros((X.shape[0] - p_h + 1, X.shape[1] - p_w + 1))

    # 遍历输出张量的每个位置
    for i in range(Y.shape[0]):
        for j in range(Y.shape[1]):
            # 如果是最大汇聚模式
            if mode == 'max':
                # 取出当前汇聚窗口内的最大值
                Y[i, j] = X[i: i + p_h, j: j + p_w].max()
            # 如果是平均汇聚模式
            elif mode == 'avg':
                # 取出当前汇聚窗口内的平均值
                Y[i, j] = X[i: i + p_h, j: j + p_w].mean()

    # 返回汇聚后的输出结果
    return Y

6.5.2 Padding & Stride
#

[[[[ 0.,  1.,  2.,  3.],
    [ 4.,  5.,  6.,  7.],
    [ 8.,  9., 10., 11.],
    [12., 13., 14., 15.]]]]
[[ 0,  1,  2],
 [ 4,  5,  6],
 [ 8,  9, 10]]
pool2d = nn.MaxPool2d((2, 3), stride=(2, 3), padding=(0, 1))
pool2d(X)

6.5.3 Multiple Channel
#