Класс AvgPool2d
Класс AvgPool2d предназначен для уменьшения пространственных размерностей многоканальных данных, таких как изображения или карты признаков.
Первый параметр kernel_size определяет размер окна пулинга.
Второй параметр stride задает шаг перемещения окна, по умолчанию равен kernel_size.
Третий параметр padding позволяет добавить нулевые отступы вокруг входных данных.
Четвертый параметр ceil_mode управляет округлением при вычислении размеров выходного тензора, а count_include_pad определяет, учитывать ли нулевые отступы при вычислении среднего.
Также имеется параметр divisor_override для переопределения делителя при вычислении среднего.
Синтаксис
torch.nn.AvgPool2d(
kernel_size,
stride=None,
padding=0,
ceil_mode=False,
count_include_pad=True,
divisor_override=None
)
Пример
Создадим простой двумерный тензор и применим к нему усредняющий пулинг с окном размера 2x2:
import torch
import torch.nn as nn
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]
])
t = t.unsqueeze(0).unsqueeze(0)
pool = nn.AvgPool2d(kernel_size=2)
res = pool(t)
print(res)
Результат выполнения кода:
tensor([[[[3.5000, 5.5000],
[11.5000, 13.5000]]]])
Пример
Пример использования параметра stride, который задает шаг перемещения окна пулинга. В этом примере шаг равен 1:
import torch
import torch.nn as nn
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]
])
t = t.unsqueeze(0).unsqueeze(0)
pool = nn.AvgPool2d(kernel_size=2, stride=1)
res = pool(t)
print(res)
Результат выполнения кода:
tensor([[[[3.5000, 4.5000, 5.5000],
[7.5000, 8.5000, 9.5000]]]])
Пример
Пример использования параметра padding. Добавим отступы в 1 пиксель по краям, что позволит сохранить размерность выходного тензора при шаге 1:
import torch
import torch.nn as nn
t = torch.tensor([
[1.0, 2.0, 3.0],
[4.0, 5.0, 6.0],
[7.0, 8.0, 9.0]
])
t = t.unsqueeze(0).unsqueeze(0)
pool = nn.AvgPool2d(kernel_size=3, stride=1, padding=1)
res = pool(t)
print(res)
Результат выполнения кода:
tensor([[[[2.2222, 2.7778, 2.2222],
[4.4444, 5.0000, 4.4444],
[2.2222, 2.7778, 2.2222]]]])
Пример
Применим AvgPool2d к многоканальным данным, например, к тензору с 3 каналами:
import torch
import torch.nn as nn
t = torch.randn(1, 3, 4, 4)
pool = nn.AvgPool2d(kernel_size=2, stride=2)
res = pool(t)
print(res.shape)
Результат выполнения кода:
torch.Size([1, 3, 2, 2])
Смотрите также
-
класс
MaxPool2d,
который выполняет двумерный максимальный пулинг -
класс
AvgPool1d,
который выполняет одномерный усредняющий пулинг -
класс
AvgPool3d,
который выполняет трехмерный усредняющий пулинг -
класс
AdaptiveAvgPool2d,
который выполняет адаптивный усредняющий пулинг до заданного размера