目录

  • MaxPool
  • AdaptiveMaxPool
  • AvgPool
  • AdaptiveAvgPool


Pooling layers属于torch.nn包下

https://pytorch.org/docs/stable/nn.html#pooling-layers

pytorch lightning validation频率 pytorch pooling_池化


NOTE: 1d和2d和3d使用的方式都是相同的;本质的区别就在于操作的对象是多少维度的,1d是对一维的向量进行操作,2d是对二维的矩阵进行操作,3d是对三维的矩阵进行操作。

pytorch lightning validation频率 pytorch pooling_计算机视觉_02

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时,会使用向上取整代替默认的向下取整操作来计算输出的形状

pytorch lightning validation频率 pytorch pooling_python_03


shape

1D

对一个C×H×W的三维输入Tensor, 池化输出为C×H×N, 即按照H轴逐行对W轴一维最大池化

pytorch lightning validation频率 pytorch pooling_计算机视觉_04


2D

对一个B×C×H×W的四维输入Tensor, 池化输出为B×C×M×N, 即按照C轴逐通道对H×W二维平面最大池化

pytorch lightning validation频率 pytorch pooling_计算机视觉_05


3D

对一个B×C×D×H×W的五维输入Tensor, 池化输出为B×C×M×N×K, 即按照C轴逐通道对D×H×W三维空间最大池化

pytorch lightning validation频率 pytorch pooling_python_06


对于2D和3D来说,kernel_size, stride, padding, dilation可以是单个值也可以是一个元组,对应每一个维度的值。

pytorch lightning validation频率 pytorch pooling_2d_07

pytorch lightning validation频率 pytorch pooling_2d_08

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

pytorch lightning validation频率 pytorch pooling_2d_09


2D

pytorch lightning validation频率 pytorch pooling_ide_10


3D

pytorch lightning validation频率 pytorch pooling_ide_11


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,默认是包括的。

pytorch lightning validation频率 pytorch pooling_计算机视觉_12


shape

1D

pytorch lightning validation频率 pytorch pooling_2d_13


2D

pytorch lightning validation频率 pytorch pooling_计算机视觉_14


3D

pytorch lightning validation频率 pytorch pooling_池化_15

AdaptiveAvgPool

和上述AdaptiveMaxPool用法完成一致,不再赘述
定义

nn.AdaptiveAvgPool1d(output_size)
nn.AdaptiveAvgPool2d(output_size)
nn.AdaptiveAvgPool3d(output_size)