MaxUnpool2D

Описание

Info

Родительский класс: Module

Производные классы: -

Данный модуль вычисляет частичную обратную величину двумерного максимизирующего пулинга MaxPool2D.

Операция пулинга не является полностью обратимой, так как при обработке теряются немаксимальные значения.

Данный модуль принимает в качестве входных данных выходные данные MaxPool2D, включая индексы максимальных значений, и вычисляет частичную инверсию тензора-кандидата, располагая его элементы в выходном тензоре согласно индексам максимальных значений. Все немаксимальные значения нового тензора будут нулевыми.

Инициализация

def __init__(self, maxpool2d, name=None):

Параметры

Параметр Возможные типы Описание По умолчанию
maxpool2d Module Экземпляр класса MaxPool2D. -
name str Имя слоя. None

Пояснения

-

Примеры

Необходимые импорты.

>>> import numpy as np
>>> from PuzzleLib.Backend import gpuarray
>>> from PuzzleLib.Modules import MaxPool2D, MaxUnpool2D

Info

gpuarray необходим для правильного размещения тензора на GPU

Для упрощения размер батча и количество карт примем равными 1:

>>> batchsize, maps, h, w = 1, 1, 6, 6
>>> indata = gpuarray.to_gpu(np.random.randint(0, 9, (batchsize, maps, h, w)).astype(np.float32))
>>> print(indata)
[[[[2. 0. 4. 4. 3. 0.]
   [0. 4. 2. 3. 3. 0.]
   [0. 3. 1. 4. 8. 2.]
   [7. 4. 0. 8. 0. 0.]
   [2. 6. 2. 2. 4. 3.]
   [6. 1. 0. 5. 6. 7.]]]]

Экземпляр класса MaxPool2D инициализируем с параметрами по умолчанию (size=2, stride=2, pad=0). Как и говорилось выше, экземпляр класса MaxUnpool2D должен принимать на вход объект MaxPool2D:

>>> maxpool2d = MaxPool2D()
>>> maxunpool2d = MaxUnpool2D(maxpool2d)
>>> maxpool2d(indata)
[[[[4. 4. 3.]
   [7. 8. 8.]
   [6. 5. 7.]]]]

Создадим тензор-кандидат и проведём над ним операцию:

>>> data = data = gpuarray.to_gpu(np.random.randint(0, 9, maxpool2d.data.shape).astype(np.float32))
>>> print(data)
[[[[6. 2. 6.]
   [1. 3. 1.]
   [7. 2. 6.]]]]
>>> maxunpool2d(data)
[[[[0. 0. 2. 0. 6. 0.]
   [0. 6. 0. 0. 0. 0.]
   [0. 0. 0. 0. 1. 0.]
   [1. 0. 0. 3. 0. 0.]
   [0. 7. 0. 0. 0. 0.]
   [0. 0. 0. 2. 0. 6.]]]]