--- myst: html_meta: description: Pooling layers in PyTorch C++ — MaxPool, AvgPool, AdaptiveMaxPool, AdaptiveAvgPool, and LPPool. keywords: PyTorch, C++, pooling, MaxPool2d, AvgPool2d, AdaptiveAvgPool2d, max pooling --- # 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} torch::nn::MaxPool1d :members: :undoc-members: ``` ```{doxygenclass} torch::nn::MaxPool1dImpl :members: :undoc-members: ``` ```{doxygenclass} torch::nn::MaxPool2d :members: :undoc-members: ``` ```{doxygenclass} torch::nn::MaxPool2dImpl :members: :undoc-members: ``` ```{doxygenclass} torch::nn::MaxPool3d :members: :undoc-members: ``` ```{doxygenclass} torch::nn::MaxPool3dImpl :members: :undoc-members: ``` **Example:** ```cpp auto pool = torch::nn::MaxPool2d( torch::nn::MaxPool2dOptions(2).stride(2)); ``` ## AvgPool1d / AvgPool2d / AvgPool3d ```{doxygenclass} torch::nn::AvgPool1d :members: :undoc-members: ``` ```{doxygenclass} torch::nn::AvgPool1dImpl :members: :undoc-members: ``` ```{doxygenclass} torch::nn::AvgPool2d :members: :undoc-members: ``` ```{doxygenclass} torch::nn::AvgPool2dImpl :members: :undoc-members: ``` ```{doxygenclass} torch::nn::AvgPool3d :members: :undoc-members: ``` ```{doxygenclass} torch::nn::AvgPool3dImpl :members: :undoc-members: ``` ## AdaptiveAvgPool1d / AdaptiveAvgPool2d / AdaptiveAvgPool3d ```{doxygenclass} torch::nn::AdaptiveAvgPool1d :members: :undoc-members: ``` ```{doxygenclass} torch::nn::AdaptiveAvgPool1dImpl :members: :undoc-members: ``` ```{doxygenclass} torch::nn::AdaptiveAvgPool2d :members: :undoc-members: ``` ```{doxygenclass} torch::nn::AdaptiveAvgPool2dImpl :members: :undoc-members: ``` ```{doxygenclass} torch::nn::AdaptiveAvgPool3d :members: :undoc-members: ``` ```{doxygenclass} torch::nn::AdaptiveAvgPool3dImpl :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} torch::nn::AdaptiveMaxPool1d :members: :undoc-members: ``` ```{doxygenclass} torch::nn::AdaptiveMaxPool1dImpl :members: :undoc-members: ``` ```{doxygenclass} torch::nn::AdaptiveMaxPool2d :members: :undoc-members: ``` ```{doxygenclass} torch::nn::AdaptiveMaxPool2dImpl :members: :undoc-members: ``` ```{doxygenclass} torch::nn::AdaptiveMaxPool3d :members: :undoc-members: ``` ```{doxygenclass} torch::nn::AdaptiveMaxPool3dImpl :members: :undoc-members: ``` ## FractionalMaxPool2d / FractionalMaxPool3d ```{doxygenclass} torch::nn::FractionalMaxPool2d :members: :undoc-members: ``` ```{doxygenclass} torch::nn::FractionalMaxPool2dImpl :members: :undoc-members: ``` ```{doxygenclass} torch::nn::FractionalMaxPool3d :members: :undoc-members: ``` ```{doxygenclass} torch::nn::FractionalMaxPool3dImpl :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} torch::nn::MaxUnpool1d :members: :undoc-members: ``` ```{doxygenclass} torch::nn::MaxUnpool1dImpl :members: :undoc-members: ``` ```{doxygenclass} torch::nn::MaxUnpool2d :members: :undoc-members: ``` ```{doxygenclass} torch::nn::MaxUnpool2dImpl :members: :undoc-members: ``` ```{doxygenclass} torch::nn::MaxUnpool3d :members: :undoc-members: ``` ```{doxygenclass} torch::nn::MaxUnpool3dImpl :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} torch::nn::LPPool1d :members: :undoc-members: ``` ```{doxygenclass} torch::nn::LPPool1dImpl :members: :undoc-members: ``` ```{doxygenclass} torch::nn::LPPool2d :members: :undoc-members: ``` ```{doxygenclass} torch::nn::LPPool2dImpl :members: :undoc-members: ``` ```{doxygenclass} torch::nn::LPPool3d :members: :undoc-members: ``` ```{doxygenclass} torch::nn::LPPool3dImpl :members: :undoc-members: ```