Класс AdaptiveAvgPool2d
Класс AdaptiveAvgPool2d модуля torch.nn выполняет адаптивный усредняющий пулинг для входных тензоров с размерностью (N, C, H, W) или (C, H, W). В отличие от обычного пулинга, этот слой не требует указания размера окна и шага - он автоматически вычисляет параметры, чтобы привести карту признаков к заданному целевому размеру.
Синтаксис
torch.nn.AdaptiveAvgPool2d(output_size)
Единственным обязательным параметром является output_size:
-
output_size- целевой размер выходного тензора. Может быть задан как целое число (тогда высота и ширина будут одинаковы) или как кортеж(H, W).
Пример
Создадим слой адаптивного пулинга, который преобразует входной тензор к размеру 3×3:
import torch
pool = torch.nn.AdaptiveAvgPool2d((3, 3))
t = torch.randn(1, 1, 5, 5)
res = pool(t)
print(res.shape)
Результат выполнения кода:
torch.Size([1, 1, 3, 3])
Как видим, тензор размером 5×5 был преобразован в 3×3.
Пример
Если передать одно целое число, пулинг будет применён с одинаковыми размерами по высоте и ширине:
import torch
pool = torch.nn.AdaptiveAvgPool2d(2)
t = torch.randn(1, 3, 8, 8)
res = pool(t)
print(res.shape)
Результат выполнения кода:
torch.Size([1, 3, 2, 2])
В этом случае тензор размером 8×8 преобразуется в 2×2.
Пример
Продемонстрируем работу слоя на небольшом примере, выведя результат преобразования:
import torch
pool = torch.nn.AdaptiveAvgPool2d(2)
t = torch.tensor([
[1, 2, 3, 4],
[5, 6, 7, 8],
[9, 10, 11, 12],
[13, 14, 15, 16]
]).float().unsqueeze(0).unsqueeze(0)
res = pool(t)
print(res)
Результат выполнения кода:
tensor([[[[3.5, 5.5],
[11.5, 13.5]]]])
Адаптивный пулинг разбил исходный тензор на четыре области и вычислил среднее значение в каждой из них.
Смотрите также
-
класс
AdaptiveAvgPool1d,
который выполняет адаптивный усредняющий пулинг для одномерных данных -
класс
AdaptiveMaxPool2d,
который выполняет адаптивный максимальный пулинг для двумерных данных -
класс
AvgPool2d,
который выполняет обычный усредняющий пулинг с заданными окном и шагом -
класс
MaxPool2d,
который выполняет максимальный пулинг для двумерных данных