6.5 池化层

是什么:池化层跟卷积层类似有个滑动窗口,用来取一个区域内的最大值或者平均值。

作用:卷积神经网络的最后的部分应该要看到整个图像的全局,通过池化(汇聚)操作,逐渐汇聚要取的像素,最终实现学习全局表示的目标。同时,卷积层的所有优势也被保留在了中间层。

特点:

1.降低卷积层读对位置的敏感性。(优点)

2.降低对空间降采样表示的敏感性。(优点)

3.池化层的输入通道和输出通道相同,如X的形状为1,2,4,4,1代表样本数,第二个值:2,代表通道为2,所以输出的结果通道仍然为2,输出结果应该为1,2,计算后的w,计算后的H

4.使用最大汇聚层以及大于1的步幅,可以减少输出结果的空间维度(如高度和宽度)。

解释:因为池化是选出一个区域的作最大值或平均值,所以取池化区域内的像素时不依赖像素的位置。因为池化层往往在卷积层的后面,所以池化层可以降低卷积层对位置的敏感性。同样也可以降低空间降采样的敏感性。

池化后的输出形状

W = (行数 - 池化行数 + 1 + 池化行方向步长) / 池化行方向步长

H = (列数 - 池化列数 + 1 + 池化列方向步长) / 池化列方向步长

一.单通道池化

python 复制代码
import torch
from torch import nn
from d2l import torch as d2l

池化层的前向传播函数

python 复制代码
def pool2d(X,pool_size,mode='max'):
    p_h,p_w = pool_size
    # 池化层与卷积层类似,池化后的输出形状计算方法根卷积一样
    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
python 复制代码
X = torch.tensor([[0.0, 1.0, 2.0],
                  [3.0, 4.0, 5.0],
                  [6.0, 7.0, 8.0]])
print(pool2d(X, (2, 2)))
print(pool2d(X, (2, 2),'avg'))
python 复制代码
tensor([[4., 5.],
        [7., 8.]])
tensor([[2., 3.],
        [5., 6.]])

池化层的填充和步幅

python 复制代码
X = torch.arange(16,dtype=torch.float32)
print(X)
python 复制代码
tensor([ 0.,  1.,  2.,  3.,  4.,  5.,  6.,  7.,  8.,  9., 10., 11., 12., 13.,
        14., 15.])
python 复制代码
#(样本数,通道数,行数,列数)
X = X.reshape((1,1,4,4))
print(X)
python 复制代码
tensor([[[[ 0.,  1.,  2.,  3.],
          [ 4.,  5.,  6.,  7.],
          [ 8.,  9., 10., 11.],
          [12., 13., 14., 15.]]]])

默认步幅与池化窗口相同,当使用3x3的池化窗口,步幅也是3x3

python 复制代码
pool2d = nn.MaxPool2d(3)
pool2d(X)
python 复制代码
tensor([[[[10.]]]])

手动设置池化尺寸

python 复制代码
pool2d = nn.MaxPool2d((2,3),stride=(2,3),padding=(0,1))
pool2d(X)
python 复制代码
tensor([[[[ 5.,  7.],
          [13., 15.]]]])

二.多通道池化

手动设置池化尺寸

python 复制代码
pool2d = nn.MaxPool2d((2,3),stride=(2,3),padding=(0,1))
pool2d(X)
python 复制代码
输出:
tensor([[[[ 5.,  7.],
          [13., 15.]]]])

多通道池化,X的原shape = (1,1,4,4),下句是在第二个维度上增加一个4x4的矩阵 形状变成 (1,2,4,4)

python 复制代码
X = torch.cat((X,X+1),1)
print(X)
print(X.shape)
python 复制代码
tensor([[[[ 0.,  1.,  2.,  3.],
          [ 4.,  5.,  6.,  7.],
          [ 8.,  9., 10., 11.],
          [12., 13., 14., 15.]],

         [[ 1.,  2.,  3.,  4.],
          [ 5.,  6.,  7.,  8.],
          [ 9., 10., 11., 12.],
          [13., 14., 15., 16.]]]])
torch.Size([1, 2, 4, 4])
python 复制代码
pool2d = nn.MaxPool2d(3,padding=1,stride=2)
X = pool2d(X)
print(X)
print(X.shape) # 池化不像卷积那样每个通道的结果要合在一起,所以池化层的输入通道和输出通道相同
python 复制代码
tensor([[[[ 5.,  7.],
          [13., 15.]],

         [[ 6.,  8.],
          [14., 16.]]]])
# 池化层的输入通道和输出通道相同,X的通道为2,所以输出的结果通道仍然为2,下面第一个1是样本数,第二个值是通道数
torch.Size([1, 2, 2, 2])
相关推荐
Easy_API9 小时前
2.8万亿参数,编程反超GPT-6 Astra:Kimi K3.1 Pro把开源模型推到了哪一步
大数据·人工智能·gpt·深度学习
智购科技自动售货机厂家17 小时前
让AI经营自动售货机:从Project Vend看工具权限与业务规则~YH
大数据·服务器·单片机·嵌入式硬件·深度学习
用户0807759078518 小时前
第三方并行库"静默算错":一次 ring attention 的排查记录
深度学习
陈嘿萌18 小时前
ACM MM 2026|告别密集交互!ProtoHGF-Net:基于原型超图的RGBT目标检测新范式
图像处理·人工智能·深度学习·目标检测·计算机视觉·学术研究与理论基础
FanfanZainuli18 小时前
减肥APP智能化技术演进:从“内容推荐“到“AI驱动的个性化闭环“
人工智能·深度学习·机器学习
试剂界的爱马仕19 小时前
α-Cyano-4-hydroxycinnamic acid(CHCA)用作 MALDI-TOF 基质的配制与使用
大数据·人工智能·深度学习·学习
大熊背20 小时前
人工智能中的数学之美---从向量角度理解深度学习中的感知机
人工智能·深度学习
指针向南20 小时前
PDF 转 HTML 免费5种方法,体积0.5%到368%
图像处理·人工智能·计算机视觉·pdf
小蒋观天下20 小时前
网络抖动、乱序、丢包:UDP/RTSP/TCP对AI抓拍、轨迹跟踪的不同影响
大数据·人工智能·深度学习
高洁0121 小时前
大模型检索增强生成(RAG)的技术原理与架构设计
人工智能·深度学习·机器学习·django·迁移学习