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

Класс FractionalMaxPool2d

Класс FractionalMaxPool2d применяет двумерное дробное максимальное объединение (fractional max pooling) к входным данным. В отличие от обычного MaxPool2d, он позволяет использовать нецелочисленные размеры ядра и шага, что даёт возможность получать выходные тензоры произвольных размеров. Первым параметром передаётся размер ядра пулинга, вторым - выходной размер или коэффициент масштабирования. Также можно задать случайность через параметр _random_samples.

Синтаксис

torch.nn.FractionalMaxPool2d( kernel_size, output_size=None, output_ratio=None, return_indices=False, _random_samples=None )

Параметры

В параметре kernel_size задаётся размер окна пулинга (целое число или кортеж из двух чисел). В параметре output_size указывается желаемый размер выхода (целое число или кортеж). В параметре output_ratio можно задать коэффициент масштабирования (число от 0 до 1). Параметр return_indices управляет возвратом индексов максимальных элементов. Параметр _random_samples используется для явной передачи случайных выборок.

Пример с указанием выходного размера

Создадим слой дробного пулинга с ядром 3x3 и выходным размером 2x2:

import torch import torch.nn as nn torch.manual_seed(0) pool = nn.FractionalMaxPool2d( kernel_size=3, output_size=2 ) t = torch.tensor([ [[1.0, 2.0, 3.0, 4.0], [5.0, 6.0, 7.0, 8.0], [9.0, 10.0, 11.0, 12.0], [13.0, 14.0, 15.0, 16.0]] ]).unsqueeze(0) res = pool(t) print(res)

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

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

Пример с коэффициентом масштабирования

Используем параметр output_ratio для уменьшения размера тензора в два раза:

import torch import torch.nn as nn torch.manual_seed(1) pool = nn.FractionalMaxPool2d( kernel_size=3, output_ratio=0.5 ) t = torch.tensor([ [[1.0, 2.0, 3.0, 4.0], [5.0, 6.0, 7.0, 8.0], [9.0, 10.0, 11.0, 12.0], [13.0, 14.0, 15.0, 16.0]] ]).unsqueeze(0) res = pool(t) print(res)

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

tensor([[[[ 3., 4.], [11., 12.]]]])

Пример с возвратом индексов

Установим параметр return_indices в значение True, чтобы получить индексы максимальных элементов:

import torch import torch.nn as nn torch.manual_seed(2) pool = nn.FractionalMaxPool2d( kernel_size=2, 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, 9.0]] ]).unsqueeze(0) res, indices = pool(t) print(res) print(indices)

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

tensor([[[[4., 6.], [7., 9.]]]]) tensor([[[[3, 5], [6, 8]]]])

Пример использования в модели

Включим дробный пулинг в нейронную сеть для обработки изображений:

import torch import torch.nn as nn torch.manual_seed(0) class Net(nn.Module): def __init__(self): super().__init__() self.conv1 = nn.Conv2d(1, 8, 3, padding=1) self.pool = nn.FractionalMaxPool2d( kernel_size=3, output_ratio=0.5 ) self.fc = nn.Linear(8 * 2 * 2, 10) def forward(self, x): x = self.conv1(x) x = self.pool(x) x = x.view(x.size(0), -1) return self.fc(x) model = Net() t = torch.randn(1, 1, 4, 4) res = model(t) print(res.shape)

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

torch.Size([1, 10])

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

  • класс MaxPool2d,
    который выполняет обычное двумерное максимальное объединение с целочисленными параметрами
  • класс AvgPool2d,
    который выполняет двумерное среднее объединение
  • класс AdaptiveMaxPool2d,
    который выполняет адаптивное максимальное объединение с произвольным выходным размером
  • класс Conv2d,
    который выполняет двумерную свёртку над входными данными
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить