Функция avg_pool2d
Функция avg_pool2d из модуля torch.nn.functional
применяется к входному тензору для уменьшения пространственных размерностей
путём усреднения значений в скользящем окне. Первым параметром функция
принимает входной тензор размерностью (N, C, H, W) или (C, H, W).
Вторым параметром указывается размер окна пулинга kernel_size.
Третьим параметром можно задать шаг stride, четвёртым - отступы
padding. Также доступны параметры ceil_mode для
округления размера в большую сторону и count_include_pad,
определяющий учёт заполнения при вычислении среднего.
Синтаксис
torch.nn.functional.avg_pool2d(
input,
kernel_size,
stride=None,
padding=0,
ceil_mode=False,
count_include_pad=True,
divisor_override=None
)
Пример с базовым использованием
Применим усредняющий пулинг с окном 2x2 к тензору размером 4x4:
import torch
import torch.nn.functional as F
t = torch.tensor([
[1.0, 2.0, 3.0, 4.0],
[5.0, 6.0, 7.0, 8.0],
[9.0, 10.0, 11.0, 12.0],
[13.0, 14.0, 15.0, 16.0]
]).unsqueeze(0).unsqueeze(0)
res = F.avg_pool2d(t, kernel_size=2)
print(res)
Результат выполнения кода:
tensor([[[[3.5000, 5.5000],
[11.5000, 13.5000]]]])
Пример с шагом и отступами
Установим шаг 1 и отступ 1, чтобы сохранить размерность выхода:
import torch
import torch.nn.functional as F
t = torch.tensor([
[1.0, 2.0, 3.0],
[4.0, 5.0, 6.0],
[7.0, 8.0, 9.0]
]).unsqueeze(0).unsqueeze(0)
res = F.avg_pool2d(t, kernel_size=3, stride=1, padding=1)
print(res)
Результат выполнения кода:
tensor([[[[2.0000, 2.6667, 2.3333],
[3.3333, 5.0000, 4.6667],
[2.6667, 4.3333, 4.0000]]]])
Пример с параметром ceil_mode
Используем ceil_mode=True, чтобы включить окна,
выходящие за границы тензора:
import torch
import torch.nn.functional as F
t = torch.tensor([
[1.0, 2.0, 3.0],
[4.0, 5.0, 6.0],
[7.0, 8.0, 9.0]
]).unsqueeze(0).unsqueeze(0)
res = F.avg_pool2d(t, kernel_size=2, stride=2, ceil_mode=True)
print(res)
Результат выполнения кода:
tensor([[[[3.0000, 4.5000],
[7.5000, 9.0000]]]])
Пример с пакетом данных
Применим пулинг к пакету из двух изображений с 3 каналами:
import torch
import torch.nn.functional as F
t = torch.randn(2, 3, 8, 8)
res = F.avg_pool2d(t, kernel_size=4, stride=2)
print(res.shape)
Результат выполнения кода:
torch.Size([2, 3, 3, 3])
Смотрите также
-
функцию
max_pool2d,
которая выполняет пулинг с выбором максимального значения -
функцию
adaptive_avg_pool2d,
которая позволяет задать целевой размер выхода -
функцию
adaptive_max_pool2d,
которая выполняет адаптивный максимальный пулинг -
функцию
lp_pool2d,
которая выполняет пулинг на основе Lp-нормы