Класс AdaptiveMaxPool1d
Класс AdaptiveMaxPool1d реализует операцию адаптивного
максимального пулинга для одномерных данных. В отличие от
обычного пулинга, адаптивный пулинг не требует задания размера
окна и шага - вместо этого он принимает целевой размер
выходного тензора. Первым параметром передаётся целевой размер
выхода, вторым параметром можно указать возврат индексов
максимальных элементов.
Синтаксис
torch.nn.AdaptiveMaxPool1d(output_size, return_indices=False)
Параметры
Класс принимает следующие параметры:
output_size - целевой размер выходного тензора по
пространственному измерению. Может быть задан как целое число
или как кортеж из одного элемента.
return_indices - если установить в True,
то слой будет возвращать не только результат пулинга, но и
индексы максимальных элементов. Это может быть полезно для
обратных операций, таких как MaxUnpool1d.
Пример с выходным размером 2
Давайте применим адаптивный макспулинг к одномерному тензору длины 8, уменьшив его до размера 2:
import torch
import torch.nn as nn
# Создаём слой адаптивного макспулинга
pool = nn.AdaptiveMaxPool1d(output_size=2)
# Создаём входной тензор размером (batch=1, channels=1, length=8)
t = torch.tensor([
[[1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0]]
])
res = pool(t)
print(res)
Результат выполнения кода:
tensor([
[[4., 8.]]
])
Пример с возвратом индексов
Используем параметр return_indices для получения
индексов максимальных элементов:
import torch
import torch.nn as nn
# Создаём слой с возвратом индексов
pool = nn.AdaptiveMaxPool1d(output_size=2, return_indices=True)
t = torch.tensor([
[[1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0]]
])
res, idx = pool(t)
print("Result:", res)
print("Indices:", idx)
Результат выполнения кода:
Result: tensor([
[[4., 8.]]
])
Indices: tensor([
[[3, 7]]
])
Пример работы с многоканальными данными
Адаптивный макспулинг работает с многоканальными данными, обрабатывая каждый канал независимо:
import torch
import torch.nn as nn
pool = nn.AdaptiveMaxPool1d(output_size=3)
# Тензор размером (batch=1, channels=3, length=6)
t = torch.tensor([
[
[1.0, 2.0, 3.0, 4.0, 5.0, 6.0],
[6.0, 5.0, 4.0, 3.0, 2.0, 1.0],
[1.0, 3.0, 5.0, 2.0, 4.0, 6.0]
]
])
res = pool(t)
print(res)
Результат выполнения кода:
tensor([
[
[2., 4., 6.],
[6., 4., 2.],
[3., 5., 6.]
]
])
Смотрите также
-
класс
MaxPool1d,
который выполняет обычный максимальный пулинг с фиксированным окном -
класс
AdaptiveAvgPool1d,
который выполняет адаптивный средний пулинг для 1D данных -
класс
AdaptiveMaxPool2d,
который выполняет адаптивный макспулинг для 2D данных -
класс
Conv1d,
который выполняет одномерную свёртку входного сигнала