Функция lp_pool2d
Функция lp_pool2d применяет двумерное пулингование на основе Lp-нормы к входному тензору. Эта операция полезна для извлечения признаков на основе обобщённой нормы. Первым параметром функция принимает входной тензор размерности (N, C, H, W) или (C, H, W). Вторым параметром задаётся норма p (по умолчанию 2). Третьим параметром указывается размер окна пулинга в виде (kh, kw) или k для квадратного окна. Четвёртым параметром можно задать шаг пулинга (по умолчанию равен размеру окна).
Синтаксис
torch.nn.functional.lp_pool2d(input, norm_type, kernel_size, stride=None, ceil_mode=False)
Пример
Давайте применим L2-пулинг к двумерному тензору с окном размера 2:
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.lp_pool2d(t, 2, 2)
print(res.squeeze())
Результат выполнения кода:
tensor([
[8.1240, 11.3137],
[20.3961, 23.5806],
])
Пример
Теперь применим L1-пулинг с шагом 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.lp_pool2d(t, 1, 2, stride=1, ceil_mode=True)
print(res.squeeze())
Результат выполнения кода:
tensor([
[12.0000, 16.0000],
[24.0000, 28.0000],
])
Пример
Используем L∞-пулинг (норма Чебышёва) для выделения максимальных значений в окне:
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],
]).unsqueeze(0).unsqueeze(0)
res = F.lp_pool2d(t, float('inf'), 2, stride=2)
print(res.squeeze())
Результат выполнения кода:
tensor([
[6.0000, 8.0000],
[10.0000, 12.0000],
])
Смотрите также
-
функцию
max_pool2d,
которая выполняет двумерное max-пулингование -
функцию
avg_pool2d,
которая выполняет двумерное average-пулингование -
функцию
adaptive_avg_pool2d,
которая выполняет адаптивное двумерное average-пулингование -
функцию
pad,
которая добавляет отступы к тензору перед пулингованием