torch.nn.MaxPool2d(kernel_size, stride=None, padding=0, dilation=1, return_indices=False, ceil_mode=False)
\(2D\) 最大池化。
参数:
kernel_size
:最大池化的窗口大小,可以是单个值,也可以是 \(tuple\) 元组。stride
:步长,可以是单个值,也可以是 \(tuple\) 元组。padding
:填充,可以是单个值,也可以是 \(tuple\) 元组。dilation
:控制窗口中元素步幅。return_indices
:布尔类型,返回最大值位置索引。ceil_mode
:布尔类型,为 \(True\),用向上取整的方法,计算输出形状,默认向下取整。
参数详解:
kernel_size:
这里的kernel_size
跟卷积核不是一个东西。kernel_size
可以看做是一个滑动窗口,这个窗口的大小由自己指定,如果输入是单个值,例如 \(3\) ,那么窗口的大小就是 \(3 \times 3\) ,还可以输入元组,例如 \((3, 2)\),那么窗口大小就是 \(3 \times 2\) 。
最大池化的方法就是取这个窗口覆盖元素中的最大值。
stride:
这个参数来确定这个窗口如何进行滑动。如果不指定这个参数,那么默认步长跟最大池化窗口大小一致。如果指定了参数,那么将按照我们指定的参数进行滑动。例如 stride=(2,3)
, 那么窗口将每次向右滑 \(3\) 个元素位置,或者向下滑动 \(2\) 个元素位置。
padding:
这参数控制如何进行填充,填充值默认为 \(0\)。如果是单个值,例如 \(1\),那么将在周围填充一圈0。还可以用元组指定如何填充,例如padding=(2, 1)
,表示在上下两个方向个填充两行 \(0\),在左右两个方向各填充一列 \(0\)。
return_indices:
这是个布尔类型值,表示返回值中是否包含最大值位置的索引。注意这个最大值指的是在所有窗口中产生的最大值,如果窗口产生的最大值总共有 \(5\) 个,就会有 \(5\) 个返回值。
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;
# 窗口将每次向右滑动 3 个元素位置,或者向下滑动 2 个元素位置。
pool2d = nn.MaxPool2d((2, 4), padding=(1, 2), stride=(2, 3))
print(pool2d(X))
tensor([[[[ 1., 3.],
[ 9., 11.],
[13., 15.]]]])
标签:窗口,nn,填充,torch,MaxPool2d,stride,size From: https://www.cnblogs.com/keye/p/17012215.html