torch.nn.MaxPool2d()
torch.nn.MaxPool2d(kernel_size, stride=None, padding=0, dilation=1, return_indices=False, ceil_mode=False)
最大池化。
参数:
kernel_size
:最大池化的窗口大小,可以是单个值,也可以是 元组。stride
:步长,可以是单个值,也可以是 元组。padding
:填充,可以是单个值,也可以是 元组。dilation
:控制窗口中元素步幅。return_indices
:布尔类型,返回最大值位置索引。ceil_mode
:布尔类型,为 ,用向上取整的方法,计算输出形状,默认向下取整。
参数详解:
kernel_size:
这里的kernel_size
跟卷积核不是一个东西。kernel_size
可以看做是一个滑动窗口,这个窗口的大小由自己指定,如果输入是单个值,例如 ,那么窗口的大小就是 ,还可以输入元组,例如 ,那么窗口大小就是 。
最大池化的方法就是取这个窗口覆盖元素中的最大值。
stride:
这个参数来确定这个窗口如何进行滑动。如果不指定这个参数,那么默认步长跟最大池化窗口大小一致。如果指定了参数,那么将按照我们指定的参数进行滑动。例如 stride=(2,3)
, 那么窗口将每次向下滑动 个元素位置,或者向右滑 个元素位置。
padding:
这参数控制如何进行填充,填充值默认为 。如果是单个值,例如 ,那么将在周围填充一圈0。还可以用元组指定如何填充,例如padding=(2, 1)
,表示在上下两个方向个填充两行 ,在左右两个方向各填充一列 。
return_indices:
这是个布尔类型值,表示返回值中是否包含最大值位置的索引。注意这个最大值指的是在所有窗口中产生的最大值,如果窗口产生的最大值总共有 个,就会有 个返回值。
ceil_mode:
这个也是布尔类型值,它决定的是在计算输出结果形状的时候,是使用向上取整还是向下取整。
示例:
import torch
from torch import nn
# 定义输入
# 四个参数分别表示 (batch_size, C_in, H_in, W_in)
# 分别对应,批处理大小,输入通道数,图像高度(像素),图像宽度(像素)
# 为了简化表示,我们只模拟单张图片输入,单通道图片,图片大小是4x4
X = torch.arange(16, dtype=torch.float).view((1, 1, 4, 4))
print(X)
tensor([[[[ 0., 1., 2., 3.],
[ 4., 5., 6., 7.],
[ 8., 9., 10., 11.],
[12., 13., 14., 15.]]]])
# 仅定义一个 3x3 的池化层窗口
pool2d = nn.MaxPool2d(3)
print(pool2d(X))
tensor([[[[10.]]]])
# 定义一个 3x3 的池化层窗口;
# 周围填充了一圈 0;
# 步长为 2。
pool2d = nn.MaxPool2d(3, padding=1, stride=2)
print(pool2d(X))
tensor([[[[ 5., 7.],
[13., 15.]]]])
# 定义一个 2x4 的池化层窗口;
# 上下方向填充一行 0, 左右方向填充两行 0;
# 窗口将每次向下滑动 2 个元素位置,或者向右滑动 2 个元素位置。
pool2d = nn.MaxPool2d((2, 4), padding=(1, 2), stride=(2, 2))
print(pool2d(X))
tensor([[[[ 1., 3.],
[ 9., 11.],
[13., 15.]]]])
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
2018-12-29 训练集、测试集的划分
2017-12-29 Oracle(字符函数)