hi, i am a beginner of pytorch.

The problem is i have 16 tensors(each size is 14 * 14), and how could i use global max pooling and then calculate the average value of every 4 tensors, and return an output tensor with 4 * 1.

Thanks.

You could use an adaptive pooling layer first and then calculate the average using a `view`

on the result:

```
x = torch.randn(16, 14, 14)
out = F.adaptive_max_pool2d(x.unsqueeze(0), output_size=1)
# Calculate result manually to compare results
out_manual = torch.stack([out[:, i:i+4].mean() for i in range(0, 16, 4)])
out = out.view(out.size(0), out.size(1)//4, -1)
out = out.mean(2)
print(torch.allclose(out_manual, out))
> True
```

thanks. i figure it out

@ptrblck Do you know if `F.adaptive_avg_pool*`

default to simply calling `torch.mean`

if the output size is 1? (I want to use `adaptive_avg_pool*`

for convenience but a bit hesitant because of potential overhead)

Yes, it should dispatch into `mean`

.

If I remember it correctly, this call was missing for `memory_format=torch.channels_last`

workloads and was added before 1.7, so I would recommend to use the latest PyTorch version (as always ).

Yes, I think thatâ€™s the case. Based on the docs in TF it seems you might need to add the `keedims=True`

argument to get the same results and shape.

I see. What if I want a `2D array`

as a result instead of the same shape (`3D`

in my case)?

Afaik, TFâ€™s `GlobalMaxPooling`

(if `keepdims=False`

, which is so by default) outputs a `2D tensor`

.

You could `squeeze`

the spatial dimension via:

```
pool = nn.AdaptiveMaxPool2d(output_size=1)
x = torch.randn(2, 3, 24, 24)
out =pool(x)
print(out.shape)
> torch.Size([2, 3, 1, 1])
out = out.squeeze(3).squeeze(2)
print(out.shape)
> torch.Size([2, 3])
```