Функция adaptive_avg_pool2d
Функция adaptive_avg_pool2d применяется к двумерным входным данным
(например, к картам признаков после свёрточных слоёв) для выполнения
адаптивного усредняющего пулинга. В отличие от обычного пулинга,
адаптивный пулинг позволяет задавать выходной размер, а не размер окна или шаг.
Первый параметр функции - входной тензор размерностью (N, C, H, W),
второй - выходной размер в виде кортежа (H_out, W_out) или целого числа для квадратного выхода.
Функция возвращает тензор размером (N, C, H_out, W_out).
Синтаксис
torch.adaptive_avg_pool2d(input, output_size)
Пример
Давайте применим адаптивный усредняющий пулинг к тензору размером (1, 1, 4, 4) и преобразуем его к размеру (2, 2):
import torch
import torch.nn.functional as F
t = torch.tensor([
[[[1, 2, 3, 4],
[5, 6, 7, 8],
[9, 10, 11, 12],
[13, 14, 15, 16]]]
], dtype=torch.float)
res = F.adaptive_avg_pool2d(t, (2, 2))
print(res)
Результат выполнения кода:
tensor([[[[ 3.5000, 5.5000],
[11.5000, 13.5000]]]])
Как видно, входная матрица была разделена на 4 блока размером (2, 2), и для каждого блока вычислено среднее арифметическое.
Пример
Адаптивный пулинг также позволяет преобразовывать тензоры к размеру (1, 1), что часто используется для глобального усреднения:
import torch
import torch.nn.functional as F
t = torch.randn(1, 3, 8, 8)
res = F.adaptive_avg_pool2d(t, (1, 1))
print(res.shape)
Результат выполнения кода:
torch.Size([1, 3, 1, 1])
Таким образом, каждая карта признаков была усреднена до одного числа.
Пример
Если передан один размер, то выходной тензор будет квадратным:
import torch
import torch.nn.functional as F
t = torch.tensor([
[[[1, 2, 3],
[4, 5, 6],
[7, 8, 9]]]
], dtype=torch.float)
res = F.adaptive_avg_pool2d(t, 2)
print(res)
Результат выполнения кода:
tensor([[[[3.0000, 4.0000],
[6.0000, 7.0000]]]])
Смотрите также
-
функцию
adaptive_max_pool2d,
которая выполняет адаптивный максимальный пулинг -
функцию
avg_pool2d,
которая выполняет усредняющий пулинг с фиксированным окном -
функцию
max_pool2d,
которая выполняет максимальный пулинг с фиксированным окном -
функцию
interpolate,
которая изменяет размер тензора с помощью интерполяции