РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
419 of 769 menu

Функция adaptive_max_pool2d

Функция adaptive_max_pool2d применяет адаптивный двумерный max pooling к входному тензору. В отличие от обычного max_pool2d, где размер окна и шаг задаются явно, адаптивная версия позволяет указать желаемый размер выходного пространства, и функция автоматически подбирает параметры окна, чтобы получить выходной тензор точно заданного размера. Это особенно удобно в архитектурах нейронных сетей, где нужно соединить слои с различными пространственными размерами. Первым параметром функция принимает входной тензор, вторым - целевой размер выходного пространства.

Синтаксис

torch.nn.functional.adaptive_max_pool2d(input, output_size, return_indices=False)

Основные параметры

Функция принимает следующие параметры:

  • input - входной тензор размерности (N, C, H, W) или (C, H, W), где N - размер батча, C - число каналов, H и W - высота и ширина;
  • output_size - целевой размер выходного пространства. Может быть задан как целое число (тогда высота и ширина будут одинаковыми) или как кортеж (H_out, W_out);
  • return_indices - если True, то функция возвращает также индексы максимальных элементов, которые могут быть использованы в max_unpool2d.

Пример

Давайте применим адаптивный max pooling к тензору размером (1, 1, 4, 4) и преобразуем его к размеру (2, 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) res = F.adaptive_max_pool2d(t, (2, 2)) print(res)

Результат выполнения кода:

tensor([[ [[ 6., 8.], [14., 16.]] ]])

Пример

Теперь давайте преобразуем тот же тензор к одному значению, указав output_size=1:

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) res = F.adaptive_max_pool2d(t, 1) print(res)

Результат выполнения кода:

tensor([[[[16.]]]])

Пример

Рассмотрим пример с несколькими каналами и получим индексы максимальных элементов:

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] ], [ [16, 15, 14, 13], [12, 11, 10, 9], [8, 7, 6, 5], [4, 3, 2, 1] ] ], dtype=torch.float).unsqueeze(0) res, indices = F.adaptive_max_pool2d(t, (2, 2), return_indices=True) print(res) print(indices)

Результат выполнения кода:

tensor([[ [[ 6., 8.], [14., 16.]], [[16., 14.], [ 8., 2.]] ]]) tensor([[ [[ 5, 7], [13, 15]], [[ 0, 2], [10, 14]] ]])

Пример

Покажем, как адаптивный max pooling работает с батчем изображений разного размера:

import torch import torch.nn.functional as F t1 = torch.randn(1, 3, 4, 4) t2 = torch.randn(1, 3, 8, 8) t3 = torch.randn(1, 3, 16, 16) res1 = F.adaptive_max_pool2d(t1, (2, 2)) res2 = F.adaptive_max_pool2d(t2, (2, 2)) res3 = F.adaptive_max_pool2d(t3, (2, 2)) print(res1.shape) print(res2.shape) print(res3.shape)

Результат выполнения кода:

torch.Size([1, 3, 2, 2]) torch.Size([1, 3, 2, 2]) torch.Size([1, 3, 2, 2])

Смотрите также

  • функцию max_pool2d,
    которая выполняет обычный двумерный max pooling с заданными параметрами окна
  • функцию adaptive_avg_pool2d,
    которая выполняет адаптивный двумерный average pooling
  • функцию avg_pool2d,
    которая выполняет обычный двумерный average pooling
  • функцию lp_pool2d,
    которая выполняет двумерный пуллинг на основе Lp-нормы
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить