Pooling layers属于torch.nn包下
https://pytorch.org/docs/stable/nn.html#pooling-layers
NOTE: 1d和2d和3d使用的方式都是相同的;本质的区别就在于操作的对象是多少维度的,1d是对一维的向量进行操作,2d是对二维的矩阵进行操作,3d是对三维的矩阵进行操作。
import torch.nn as nn
MaxPool
定义
nn.MaxPool1d(kernel_size, stride=None, padding=0, dilation=1, return_indices=False, ceil_mode=False)
nn.MaxPool2d(kernel_size, stride=None, padding=0, dilation=1, return_indices=False, ceil_mode=False)
nn.MaxPool3d(kernel_size, stride=None, padding=0, dilation=1, return_indices=False, ceil_mode=False)
参数
return_indices: 如果为True时,会返回最大值所在的下标位置,可方便后续的在使用torch.nn.MaxUnpool-1/2/3d 上池化操作时根据位置填回原来的位置,其他位置填0。
ceil_mode: 如果为True时,会使用向上取整代替默认的向下取整操作来计算输出的形状
shape
1D
对一个C×H×W的三维输入Tensor, 池化输出为C×H×N, 即按照H轴逐行对W轴一维最大池化
2D
对一个B×C×H×W的四维输入Tensor, 池化输出为B×C×M×N, 即按照C轴逐通道对H×W二维平面最大池化
3D
对一个B×C×D×H×W的五维输入Tensor, 池化输出为B×C×M×N×K, 即按照C轴逐通道对D×H×W三维空间最大池化
对于2D和3D来说,kernel_size, stride, padding, dilation可以是单个值也可以是一个元组,对应每一个维度的值。
AdaptiveMaxPool
定义
指定输出的大小,自适应的调节kernel_size,stride, padding得到指定大小的形状
torch.nn.AdaptiveMaxPool1d(output_size, return_indices=False)
torch.nn.AdaptiveMaxPool2d(output_size, return_indices=False)
torch.nn.AdaptiveMaxPool3d(output_size, return_indices=False)
参数
1D
2D
3D
example
#1D
input = torch.randn(1, 64, 8)
m = nn.AdaptiveMaxPool1d(5)
output = m(input)
>>> (1, 64, 5)
#2D
input = torch.randn(1, 64, 8, 9)
m = nn.AdaptiveMaxPool2d((5, 7))
output = m(input)
>>> (1, 64, 5, 7)
#3D
input = torch.randn(1, 64, 8, 9, 10)
m = nn.AdaptiveMaxPool2d((5, 7, 8))
output = m(input)
>>> (1, 64, 5, 7, 8)
AvgPool
定义
nn.AvgPool1d(kernel_size, stride=None, padding=0, ceil_mode=False, count_include_pad=True)
nn.AvgPool2d(kernel_size, stride=None, padding=0, ceil_mode=False, count_include_pad=True, divisor_override=None)
nn.AvgPool3d(kernel_size, stride=None, padding=0, ceil_mode=False, count_include_pad=True, divisor_override=None)
参数
ceil_mode: 如果为True时,会使用向上取整代替默认的向下取整操作来计算输出的形状
count_include_pad: 当为True时,在计算平均池化操作时将包括padding填充的0,默认是包括的。
shape
1D
2D
3D
AdaptiveAvgPool
和上述AdaptiveMaxPool用法完成一致,不再赘述
定义
nn.AdaptiveAvgPool1d(output_size)
nn.AdaptiveAvgPool2d(output_size)
nn.AdaptiveAvgPool3d(output_size)