Класс MaxPool1d
Класс MaxPool1d применяет операцию максимального пулинга к одномерным данным.
Он скользит окном заданного размера по входному тензору и выбирает максимальное значение в каждом окне,
тем самым уменьшая размерность последовательности и выделяя наиболее важные признаки.
Основные параметры: kernel_size - размер окна пулинга, stride - шаг скольжения окна,
padding - количество нулевых элементов, добавляемых по краям,
dilation - расстояние между элементами в окне,
и ceil_mode - определяет способ вычисления размера выходного тензора при нецелых значениях.
Синтаксис
torch.nn.MaxPool1d(
kernel_size,
stride=None,
padding=0,
dilation=1,
return_indices=False,
ceil_mode=False
)
Пример
Создадим слой MaxPool1d с окном размера 2 и шагом 2,
и применим его к одномерному тензору:
import torch
import torch.nn as nn
pool = nn.MaxPool1d(kernel_size=2, stride=2)
t = torch.tensor([1, 3, 2, 4, 5, 7])
res = pool(t.unsqueeze(0).unsqueeze(0))
print(res)
Результат выполнения кода:
tensor([[[3, 4, 7]]])
Слой выбрал максимальные значения из пар (1,3), (2,4) и (5,7).
Пример
Теперь применим MaxPool1d к тензору с batch-размером и несколькими каналами.
Входной тензор имеет форму (batch, channels, length):
import torch
import torch.nn as nn
pool = nn.MaxPool1d(kernel_size=3, stride=1, padding=1)
t = torch.tensor([
[
[1, 2, 3, 4, 5],
[6, 7, 8, 9, 10]
],
[
[10, 20, 30, 40, 50],
[60, 70, 80, 90, 100]
]
])
res = pool(t)
print(res)
Результат выполнения кода:
tensor([
[
[2, 3, 4, 5, 5],
[7, 8, 9, 10, 10]
],
[
[20, 30, 40, 50, 50],
[70, 80, 90, 100, 100]
]
])
За счет padding=1 длина выходного тензора совпадает с длиной входного.
Пример
Используем MaxPool1d с параметром return_indices=True,
чтобы получить индексы максимальных элементов.
Это может пригодиться для обратного распространения:
import torch
import torch.nn as nn
pool = nn.MaxPool1d(kernel_size=2, stride=2, return_indices=True)
t = torch.tensor([5, 1, 3, 8, 2, 7])
res, indices = pool(t.unsqueeze(0).unsqueeze(0))
print(res)
print(indices)
Результат выполнения кода:
tensor([[[5, 8, 7]]])
tensor([[[0, 3, 5]]])
Тензор indices содержит позиции максимальных элементов в каждом окне.
Смотрите также
-
класс
MaxPool2d,
который выполняет макспулинг для двумерных данных (изображений) -
класс
AvgPool1d,
который выполняет усредняющий пулинг для одномерных данных -
класс
AdaptiveMaxPool1d,
который выполняет адаптивный макспулинг для одномерных данных с заданным выходным размером -
класс
Conv1d,
который выполняет одномерную свертку, часто используемую вместе с пулингом