Функция PyTorch torch.nn.AdaptiveMaxPool2d
Справочное руководство PyTorch torch.nn
torch.nn.AdaptiveMaxPool2dЭто модуль адаптивного максимального пулинга в PyTorch.
Он выполняет пулинг входных данных до указанного размера, сохраняя максимальное значение, а не среднее.
Определение функции
torch.nn.AdaptiveMaxPool2d(output_size, return_indices=False)
Parameters
output_size: Размер выходных данныхreturn_indices: Возвращать ли индексы
Примеры использования
Пример 1: Базовое использование
Пример
import torch
import torch.nn as nn
# Глобальный максимальный пулинг
gap = nn.AdaptiveMaxPool2d(1)
# Входные данные разных размеров
x1 = torch.randn(1, 64, 32, 32)
x2 = torch.randn(1, 64, 16, 16)
print("32x32 ->", gap(x1).shape)
print("16x16 ->", gap(x2).shape)
import torch.nn as nn
# Глобальный максимальный пулинг
gap = nn.AdaptiveMaxPool2d(1)
# Входные данные разных размеров
x1 = torch.randn(1, 64, 32, 32)
x2 = torch.randn(1, 64, 16, 16)
print("32x32 ->", gap(x1).shape)
print("16x16 ->", gap(x2).shape)
Пример 2: Возврат индексов
Пример
import torch
import torch.nn as nn
gap = nn.AdaptiveMaxPool2d(1, return_indices=True)
x = torch.randn(1, 64, 8, 8)
output, indices = gap(x)
print("Форма выхода:", output.shape)
print("Форма индексов:", indices.shape)
print("Значения индексов:", indices.item())
import torch.nn as nn
gap = nn.AdaptiveMaxPool2d(1, return_indices=True)
x = torch.randn(1, 64, 8, 8)
output, indices = gap(x)
print("Форма выхода:", output.shape)
print("Форма индексов:", indices.shape)
print("Значения индексов:", indices.item())
Пример 3: Сравнение с AdaptiveAvgPool2d
Пример
import torch
import torch.nn as nn
x = torch.tensor([[[
[1, 2, 3, 4],
[5, 6, 7, 8],
[9, 10, 11, 12],
[13, 14, 15, 16]
]]], dtype=torch.float32)
avgpool = nn.AdaptiveAvgPool2d(1)
maxpool = nn.AdaptiveMaxPool2d(1)
print("Ввод:\n", x[0, 0])
print("Усредняющее пулирование:", avgpool(x).item())
print("Максимальное пулирование:", maxpool(x).item())
import torch.nn as nn
x = torch.tensor([[[
[1, 2, 3, 4],
[5, 6, 7, 8],
[9, 10, 11, 12],
[13, 14, 15, 16]
]]], dtype=torch.float32)
avgpool = nn.AdaptiveAvgPool2d(1)
maxpool = nn.AdaptiveMaxPool2d(1)
print("Ввод:\n", x[0, 0])
print("Усредняющее пулирование:", avgpool(x).item())
print("Максимальное пулирование:", maxpool(x).item())
Сценарии использования
- Глобальное максимальное пулирование: Извлечение наиболее значимых признаков
- Агрегация признаков: Сохранение ключевой информации
- Сети классификации: замена FC-слоёв
Совет: max-pooling сохраняет наиболее значимые признаки, тогда как average pooling более сглаженный.
Другие расширения