Класс AvgPool1d
Класс AvgPool1d применяет усредняющий пулинг к входным данным размерности (N, C, L), где N - размер батча, C - количество каналов, L - длина последовательности. Операция заключается в скольжении окна заданного размера по временной оси и вычислении среднего арифметического значений внутри окна. Класс позволяет управлять размером окна, шагом и типом заполнения.
Основные параметры конструктора: kernel_size (размер окна пулинга), stride (шаг окна, по умолчанию равен kernel_size), padding (заполнение нулями) и ceil_mode (режим округления размеров).
Синтаксис
torch.nn.AvgPool1d(
kernel_size,
stride=None,
padding=0,
ceil_mode=False,
count_include_pad=True
)
Пример
Создадим слой пулинга с окном размера 3 и применим его к одномерному тензору:
import torch
layer = torch.nn.AvgPool1d(kernel_size=3)
t = torch.tensor([[[1, 2, 3, 4, 5, 6]]], dtype=torch.float)
res = layer(t)
print(res)
Результат выполнения кода:
tensor([[[2., 5.]]])
Выходной тензор имеет форму (1, 1, 2)⁅/⁆c: было два непересекающихся окна: [1,2,3] → 2.0 и [4,5,6] → 5.0.
Пример
Применим пулинг с окном размера 2 и шагом 2 к тензору из 4 элементов:
import torch
layer = torch.nn.AvgPool1d(kernel_size=2, stride=2)
t = torch.tensor([[[10, 20, 30, 40]]], dtype=torch.float)
res = layer(t)
print(res)
Результат выполнения кода:
tensor([[[15., 35.]]])
Окна [10,20] → 15.0 и [30,40] → 35.0.
Пример
Используем заполнение для сохранения размера выходной последовательности:
import torch
layer = torch.nn.AvgPool1d(kernel_size=3, padding=1, stride=1)
t = torch.tensor([[[1, 2, 3, 4, 5]]], dtype=torch.float)
res = layer(t)
print(res)
Результат выполнения кода:
tensor([[[0.6667, 2.0000, 3.0000, 4.0000, 3.0000]]])
Заполнение нулями добавило по одному нулю с каждой стороны, что позволило сохранить длину последовательности.
Пример
Применим пулинг к батчу из двух образцов с несколькими каналами:
import torch
torch.manual_seed(0)
layer = torch.nn.AvgPool1d(kernel_size=2, stride=2)
t = torch.randn(2, 3, 6)
res = layer(t)
print(res.shape)
Результат выполнения кода:
torch.Size([2, 3, 3])
Размерность временной оси уменьшилась с 6 до 3 (6 / 2 = 3), количество батчей и каналов сохранилось.
Смотрите также
-
класс
MaxPool1d,
который выполняет максимальный пулинг для одномерных данных -
класс
AdaptiveAvgPool1d,
который выполняет адаптивный усредняющий пулинг -
класс
Conv1d,
который выполняет одномерную свертку -
класс
Dropout,
который применяет регуляризацию для предотвращения переобучения