Функция F.max_pool2d
Функция F.max_pool2d применяет двумерную операцию максимального пулинга (max pooling) к входному тензору. Она уменьшает пространственные размеры (высоту и ширину) тензора, выбирая максимальное значение в каждом окне заданного размера. Это помогает выделить наиболее значимые признаки и снизить вычислительную сложность последующих слоёв. Первым параметром функция принимает входной тензор, вторым параметром - размер окна пулинга (kernel size). Также можно задать шаг (stride), отступы (padding) и другие параметры.
Синтаксис
torch.nn.functional.max_pool2d(input, kernel_size, stride=None, padding=0, dilation=1, ceil_mode=False, return_indices=False)
Основные параметры
Функция принимает следующие основные параметры:
-
input- входной тензор размерностью (batch, channels, height, width) -
kernel_size- размер окна пулинга (int или кортеж из двух чисел) -
stride- шаг окна (по умолчанию равен kernel_size) -
padding- отступы по краям (по умолчанию 0) -
dilation- шаг между элементами окна (по умолчанию 1) -
ceil_mode- если True, использует округление вверх для вычисления размера выхода (по умолчанию False) -
return_indices- если True, возвращает индексы максимальных элементов (по умолчанию False)
Пример
Давайте применим операцию макспулинга к небольшому двумерному тензору с окном 2x2 и шагом 2:
import torch
import torch.nn.functional as F
t = torch.tensor([
[1, 2, 3, 4],
[5, 6, 7, 8],
[9, 10, 11, 12],
[13, 14, 15, 16]
], dtype=torch.float)
t = t.unsqueeze(0).unsqueeze(0) # Добавляем размерности batch и channels
res = F.max_pool2d(t, kernel_size=2, stride=2)
print(res)
Результат выполнения кода:
tensor([[
[ 6., 8.],
[14., 16.]
]])
Пример
Используем отступы (padding) для сохранения размерности выходного тензора:
import torch
import torch.nn.functional as F
t = torch.tensor([
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
], dtype=torch.float)
t = t.unsqueeze(0).unsqueeze(0)
res = F.max_pool2d(t, kernel_size=2, stride=1, padding=1)
print(res)
Результат выполнения кода:
tensor([[
[5., 6., 6.],
[8., 9., 9.],
[8., 9., 9.]
]])
Пример
Используем параметр ceil_mode для управления размерами выходного тензора:
import torch
import torch.nn.functional as F
t = torch.tensor([
[1, 2, 3, 4, 5],
[6, 7, 8, 9, 10],
[11, 12, 13, 14, 15],
[16, 17, 18, 19, 20],
[21, 22, 23, 24, 25]
], dtype=torch.float)
t = t.unsqueeze(0).unsqueeze(0)
res1 = F.max_pool2d(t, kernel_size=2, stride=2, ceil_mode=False)
res2 = F.max_pool2d(t, kernel_size=2, stride=2, ceil_mode=True)
print("ceil_mode=False:")
print(res1)
print("ceil_mode=True:")
print(res2)
Результат выполнения кода:
ceil_mode=False:
tensor([[
[ 7., 9.],
[17., 19.]
]])
ceil_mode=True:
tensor([[
[ 7., 9., 10.],
[17., 19., 20.],
[22., 24., 25.]
]])
Пример
Возвращаем индексы максимальных элементов с помощью параметра return_indices:
import torch
import torch.nn.functional as F
t = torch.tensor([
[1, 2, 3, 4],
[5, 6, 7, 8],
[9, 10, 11, 12],
[13, 14, 15, 16]
], dtype=torch.float)
t = t.unsqueeze(0).unsqueeze(0)
res, indices = F.max_pool2d(t, kernel_size=2, stride=2, return_indices=True)
print("Максимальные значения:")
print(res)
print("Индексы:")
print(indices)
Результат выполнения кода:
Максимальные значения:
tensor([[
[ 6., 8.],
[14., 16.]
]])
Индексы:
tensor([[
[[5, 7]],
[[13, 15]]
]])
Смотрите также
-
функцию
avg_pool2d,
которая выполняет двумерное усреднение по окну -
функцию
adaptive_max_pool2d,
которая выполняет адаптивный макспулинг до заданного размера -
функцию
conv2d,
которая выполняет двумерную свертку -
функцию
dropout2d,
которая применяет двумерный дропаут для регуляризации