AdaptiveAvgPool2d in PyTorch
I had trouble understanding the AdaptiveAvgPool2d
function in PyTorch. The following examples helped me to teach myself better. Hopefully, somebody may benefit from this.
Example 1
import torch
import torch.nn as nn
import numpy as np
m = nn.AdaptiveAvgPool2d((1))
x = np.array(
[
[ 2. , 3.],
[ 4. , 1.],
])
input = torch.tensor(x)
print(input)
output = m(input)
print(output)
print(torch.mean(input))
The output will be equal to torch.mean(input)
Example 2 with a 3 x 3 x 3 tensor
x = np.array(
[
[
[ 2. , 3. , 2.],
[ 2. , 3. , 2.],
[ 2. , 3. , 2.],
],
[
[ 1. , 4. , 5.],
[ 1. , 4. , 5.],
[ 1. , 4. , 5. ],
],
[
[ 7. , 3. , 2.],
[ 7. , 3. , 2.],
[ 7. , 3. , 2.],
]
])
This is a 3 x 3 x 3 array
input = torch.tensor(x)
m = nn.AdaptiveAvgPool2d((2))
output = m(input)
print(output)
Let’s investigate why the 1st element is 2.5
We take a 2 x 2 tensor out of the 3 x 3 x 3 tensor and take the mean and see that it is 2.5
x2 = torch.tensor(np.array([2. , 3. , 2. , 3.]))
torch.mean(x2)
Example 3
We see that the 6th element is 4.5. How is this calculated?
We take the mean of the following section
x3 = torch.tensor(np.array([ 4.0 , 5. , 4. , 5.]))
torch.mean(x3)
Example 4 with a 4 x 3 x 3 tensor
x = np.array(
[
[
[ 2. , 3. , 2.],
[ 2. , 3. , 2.],
[ 2. , 3. , 2.],
],
[
[ 1. , 4. , 5.],
[ 1. , 4. , 5.],
[ 1. , 4. , 5. ],
],
[
[ 7. , 3. , 2.],
[ 7. , 3. , 2.],
[ 7. , 3. , 2.],
],
[
[ 8. , 3. , 2.],
[ 8. , 3. , 2.],
[ 8. , 3. , 2.],
]
])
input = torch.tensor(x)
print(input)
print(input.shape)
This is a 4 x 3 x 3 tensor
m = nn.AdaptiveAvgPool2d([1,1])
output= m(input)
print(output)
Let us explore why the first element is 2.3333
x4 = torch.tensor(
np.array( [ 2. , 3. , 2., 2. , 3. , 2., 2. , 3. , 2.])
)
print(torch.mean(x4))