Класс MaxPool3d
Класс MaxPool3d применяет трёхмерную операцию max pooling к входному тензору.
Он уменьшает пространственную размерность данных, выбирая максимальное значение в каждом окне пулинга.
Первый параметр kernel_size определяет размер окна пулинга в трёх измерениях.
Второй параметр stride задаёт шаг перемещения окна, по умолчанию равен kernel_size.
Третий параметр padding добавляет нулевые отступы вокруг входных данных для контроля размера выхода.
Также можно передать dilation для расширения окна, ceil_mode для округления размера вверх и return_indices для возврата индексов максимальных значений.
Синтаксис
torch.nn.MaxPool3d(
kernel_size,
stride=None,
padding=0,
dilation=1,
return_indices=False,
ceil_mode=False
)
Пример ⁅n="sect"⁆
Создадим простой трёхмерный тензор и применим к нему MaxPool3d с окном размером 2:
import torch
import torch.nn as nn
# Create a 3D tensor with shape (batch, channels, depth, height, width)
t = torch.tensor([[[[
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]]]], dtype=torch.float)
print("Input tensor:")
print(t)
print("Shape:", t.shape)
# Create MaxPool3d layer with kernel size 2
pool = nn.MaxPool3d(kernel_size=2)
res = pool(t)
print("\nOutput tensor:")
print(res)
print("Shape:", res.shape)
Результат выполнения кода:
Input tensor:
tensor([[[[[1., 2., 3.],
[4., 5., 6.],
[7., 8., 9.]]]]])
Shape: torch.Size([1, 1, 1, 3, 3])
Output tensor:
tensor([[[[[5., 6.],
[8., 9.]]]]])
Shape: torch.Size([1, 1, 1, 2, 2])
Пример ⁅n="sect"⁆
Используем MaxPool3d с шагом 1 и отступом 1, чтобы сохранить размерность:
import torch
import torch.nn as nn
torch.manual_seed(0)
t = torch.randn(1, 1, 4, 4, 4)
print("Input shape:", t.shape)
pool = nn.MaxPool3d(
kernel_size=2,
stride=1,
padding=1
)
res = pool(t)
print("Output shape:", res.shape)
Результат выполнения кода:
Input shape: torch.Size([1, 1, 4, 4, 4])
Output shape: torch.Size([1, 1, 4, 4, 4])
Пример ⁅n="sect"⁆
Получим индексы максимальных значений с помощью параметра return_indices для использования в MaxUnpool3d:
import torch
import torch.nn as nn
t = torch.tensor([[[[
[1, 2, 3, 4],
[5, 6, 7, 8],
[9, 10, 11, 12],
[13, 14, 15, 16]
]]]], dtype=torch.float)
print("Input tensor:")
print(t)
print("Shape:", t.shape)
pool = nn.MaxPool3d(
kernel_size=2,
stride=2,
return_indices=True
)
res, indices = pool(t)
print("\nOutput values:")
print(res)
print("Output indices:")
print(indices)
Результат выполнения кода:
Input tensor:
tensor([[[[[ 1., 2., 3., 4.],
[ 5., 6., 7., 8.],
[ 9., 10., 11., 12.],
[13., 14., 15., 16.]]]]])
Shape: torch.Size([1, 1, 1, 4, 4])
Output values:
tensor([[[[[ 6., 8.],
[14., 16.]]]]])
Output indices:
tensor([[[[[ 5, 7],
[13, 15]]]]])