Back to Pytorch

Pooling Layers

docs/cpp/source/api/nn/pooling.md

2.12.04.7 KB
Original Source

Pooling Layers

Pooling layers reduce spatial dimensions by aggregating values in local regions, providing translation invariance and reducing computational cost in deeper layers.

  • MaxPool: Takes the maximum value in each pooling window (preserves strong features)
  • AvgPool: Takes the average value in each pooling window (smoother downsampling)
  • AdaptivePool: Automatically calculates kernel size to produce a target output size
  • FractionalMaxPool: Randomized pooling with fractional output size
  • MaxUnpool: Computes the partial inverse of MaxPool using stored indices
  • LPPool: Power-average pooling (generalization of avg/max pooling)

MaxPool1d / MaxPool2d / MaxPool3d

{doxygenclass}
:members:
:undoc-members:
{doxygenclass}
:members:
:undoc-members:
{doxygenclass}
:members:
:undoc-members:
{doxygenclass}
:members:
:undoc-members:
{doxygenclass}
:members:
:undoc-members:
{doxygenclass}
:members:
:undoc-members:

Example:

cpp
auto pool = torch::nn::MaxPool2d(
    torch::nn::MaxPool2dOptions(2).stride(2));

AvgPool1d / AvgPool2d / AvgPool3d

{doxygenclass}
:members:
:undoc-members:
{doxygenclass}
:members:
:undoc-members:
{doxygenclass}
:members:
:undoc-members:
{doxygenclass}
:members:
:undoc-members:
{doxygenclass}
:members:
:undoc-members:
{doxygenclass}
:members:
:undoc-members:

AdaptiveAvgPool1d / AdaptiveAvgPool2d / AdaptiveAvgPool3d

{doxygenclass}
:members:
:undoc-members:
{doxygenclass}
:members:
:undoc-members:
{doxygenclass}
:members:
:undoc-members:
{doxygenclass}
:members:
:undoc-members:
{doxygenclass}
:members:
:undoc-members:
{doxygenclass}
:members:
:undoc-members:

Example:

cpp
// Output will always be 7x7 regardless of input size
auto adaptive_pool = torch::nn::AdaptiveAvgPool2d(
    torch::nn::AdaptiveAvgPool2dOptions({7, 7}));

AdaptiveMaxPool1d / AdaptiveMaxPool2d / AdaptiveMaxPool3d

{doxygenclass}
:members:
:undoc-members:
{doxygenclass}
:members:
:undoc-members:
{doxygenclass}
:members:
:undoc-members:
{doxygenclass}
:members:
:undoc-members:
{doxygenclass}
:members:
:undoc-members:
{doxygenclass}
:members:
:undoc-members:

FractionalMaxPool2d / FractionalMaxPool3d

{doxygenclass}
:members:
:undoc-members:
{doxygenclass}
:members:
:undoc-members:
{doxygenclass}
:members:
:undoc-members:
{doxygenclass}
:members:
:undoc-members:

MaxUnpool1d / MaxUnpool2d / MaxUnpool3d

Computes a partial inverse of MaxPool, using the indices of the maximum values computed during pooling to place values back into unpooled positions.

{doxygenclass}
:members:
:undoc-members:
{doxygenclass}
:members:
:undoc-members:
{doxygenclass}
:members:
:undoc-members:
{doxygenclass}
:members:
:undoc-members:
{doxygenclass}
:members:
:undoc-members:
{doxygenclass}
:members:
:undoc-members:

Example:

cpp
auto pool = torch::nn::MaxPool2d(
    torch::nn::MaxPool2dOptions(2).stride(2).return_indices(true));
auto unpool = torch::nn::MaxUnpool2d(
    torch::nn::MaxUnpoolOptions<2>(2).stride(2));

auto [output, indices] = pool->forward_with_indices(input);
auto reconstructed = unpool->forward(output, indices);

LPPool1d / LPPool2d / LPPool3d

{doxygenclass}
:members:
:undoc-members:
{doxygenclass}
:members:
:undoc-members:
{doxygenclass}
:members:
:undoc-members:
{doxygenclass}
:members:
:undoc-members:
{doxygenclass}
:members:
:undoc-members:
{doxygenclass}
:members:
:undoc-members: