- Trending Categories
- Data Structure
- Networking
- RDBMS
- Operating System
- Java
- MS Excel
- iOS
- HTML
- CSS
- Android
- Python
- C Programming
- C++
- C#
- MongoDB
- MySQL
- Javascript
- PHP
- Physics
- Chemistry
- Biology
- Mathematics
- English
- Economics
- Psychology
- Social Studies
- Fashion Studies
- Legal Studies

- Selected Reading
- UPSC IAS Exams Notes
- Developer's Best Practices
- Questions and Answers
- Effective Resume Writing
- HR Interview Questions
- Computer Glossary
- Who is Who

# How to apply a 2D Average Pooling in PyTorch?

We can apply a 2D Average Pooling over an input image composed of several input planes using the **torch.nn.AvgPool2d()** module. The input to a 2D Average Pooling layer must be of size [**N,C,H,W**] where **N** is the batch size, C is the number of channels, **H** and **W** are the height and width of the input image.

The main feature of an Average Pooling operation is the filter or kernel size and stride. This module supports **TensorFloat32**.

### Syntax

torch.nn.AvgPool2d(kernel_size)

### Parameters

**kernel_size**– The size of the window to take an average over.

Along with this parameter, there are some optional parameters also such as **stride, padding, dilation,** etc. We will take examples of these parameters in detail in the following Python examples.

### Steps

You could use the following steps to apply a 2D Average Pooling −

Import the required library. In all the following examples, the required Python library is

**torch**. Make sure you have already installed it. To apply 2D Average Pooling on images we need**torchvision**and**Pillow**as well.

import torch import torchvision from PIL import Image

Define

**input**tensor or read the input image. If an input is an image, then we first convert it into a torch tensor.Define

**kernel_size, stride**and other parameters.Next define an Average Pooling

**pooling**by passing the above defined parameters to**torch.nn.AvgPool2d()**.

pooling = nn.AvgPool2d(kernel_size)

Apply the Average Pooling

**pooling**on the input tensor or image tensor.

output = pooling(input)

Next print the tensor after Average Pooling. If the input was an image tensor, then to visualize the image, we first convert the tensor obtained after Average Pooling to PIL image and then visualize the image.

Let's take a couple of example to have a better understanding of how it works.

### Input Image

We will use the following image as the input file in the second example.

## Example 1

In the following Python example, we perform 2D Average Pooling on an input tensor. We apply different combinations of **kernel_size, stride, padding**, and **dilation**.

# Python 3 program to perform 2D Avg Pooling # Import the required libraries import torch import torch.nn as nn '''input of size = [N,C,H, W] or [C,H, W] N==>batch size, C==> number of channels, H==> height of input planes in pixels, W==> width in pixels. ''' input = torch.empty(3, 4, 4).random_(256) print("Input Tensor:

", input) print("Input Size:",input.size()) # pool of square window of size=3, stride=1 pooling1 = nn.AvgPool2d(3, stride=1) # Perform Average Pooling output = pooling1(input) print("Output Tensor:

", output) print("Output Size:",output.size()) # pool of non-square window pooling2 = nn.AvgPool2d((2, 1), stride=(1, 2)) # Perform average Pool output = pooling2(input) print("Output Tensor:

", output) print("Output Size:",output.size())

## Output

Input Tensor: tensor([[[194., 159., 7., 90.], [128., 173., 28., 211.], [252., 123., 248., 147.], [144., 107., 28., 17.]], [[122., 140., 117., 52.], [252., 118., 216., 101.], [ 88., 121., 25., 210.], [223., 162., 39., 125.]], [[168., 113., 53., 246.], [199., 23., 54., 74.], [ 95., 246., 245., 48.], [222., 175., 144., 127.]]]) Input Size: torch.Size([3, 4, 4]) Output Tensor: tensor([[[145.7778, 131.7778], [136.7778, 120.2222]], [[133.2222, 122.2222], [138.2222, 124.1111]], [[132.8889, 122.4444], [155.8889, 126.2222]]]) Output Size: torch.Size([3, 2, 2]) Output Tensor: tensor([[[161.0000, 17.5000], [190.0000, 138.0000], [198.0000, 138.0000]], [[187.0000, 166.5000], [170.0000, 120.5000], [155.5000, 32.0000]], [[183.5000, 53.5000], [147.0000, 149.5000], [158.5000, 194.5000]]]) Output Size: torch.Size([3, 3, 2])

## Example 2

In the following Python example, we perform 2D Avg Pooling on an input image. To apply 2D Avg Pooling, we first convert the image to a torch tensor and after Avg Pooling again convert it to a PIL image for visualization

# Python 3 program to perform 2D Average Pooling on image # Import the required libraries import torch import torchvision from PIL import Image import torchvision.transforms as T import torch.nn.functional as F # read the input image img = Image.open('panda.jpg') # convert the image to torch tensor img = T.ToTensor()(img) print("Original size of Image:", img.size()) #Size([3, 466, 700]) # unsqueeze to make 4D img = img.unsqueeze(0) # define avg pool with square window of size=4, stride=1 pool = torch.nn.AvgPool2d(4, 1) img = pool(img) img = img.squeeze(0) print("Size after AvgPool:",img.size()) img = T.ToPILImage()(img) img.show()

## Output

Original size of Image: torch.Size([3, 466, 700]) Size after AvgPool: torch.Size([3, 463, 697])

Note that you may get different output images at different runs because of random initialization of the weights and biases.

- Related Articles
- How to apply a 2D Max Pooling in PyTorch?\n
- How to apply a 2D convolution operation in PyTorch?
- How to apply a 2D transposed convolution operation in PyTorch?
- How to apply linear transformation to the input data in PyTorch?
- How to apply rectified linear unit function element-wise in PyTorch?
- How to apply a 2D or 3D transformation to an element with CSS
- How to apply custom filters to images (2D convolution) using OpenCV Python?
- How to store a 2d Array in another 2d Array in java?
- Car Pooling in Python
- How to resize a tensor in PyTorch?
- How to normalize a tensor in PyTorch?
- What is connection pooling in C# and how to achieve it?
- How to perform a permute operation in PyTorch?
- How to narrow down a tensor in PyTorch?
- How to plot a 2D histogram in Matplotlib?