Deconv2D

Warning

Документация к модулю находится в разработке.

Описание

Info

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

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

Этот модуль реализует операцию двумерной транспонированной свёртки. Наследуется от класса DeconvND. Для более полной информации см. DeconvND

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

def __init__(self, inmaps, outmaps, size, stride=1, pad=0, dilation=1, wscale=1.0, useBias=True, name=None,
                 initscheme=None, empty=False, groups=1):

Параметры

Параметр Возможные типы Описание По умолчанию
inmaps int Количество карт во входном тензоре. -
outmaps int Количество карт в выходном тензоре. -
size int Размер фильтра; фильтры всегда квадратные. -
stride Union[int, tuple] Шаг свёртки. 1
pad Union[int, tuple] Паддинг карт. 0
dilation Union[int, tuple] Разрежение окна свёртки. 1
wscale float Дисперсия случайных весов слоя. 1.0
useBias bool Использовать или нет вектор биасов. True
initscheme Union[tuple, str] Указывает схему инициализации весов слоя (см. createTensorWithScheme). None -> ("xavier_uniform", "in")
name str Имя слоя. None
empty bool Если True, то матрица весов и биас не инициализируются. False
groups int На сколько групп разбиваются карты для раздельной обработки. 1

Пояснения

Info

Для входного (N, C_{in}, H_{in}, W_{in}) и выходного (N, C_{out}, H_{out}, W_{out}) тензоров существует зависимость между их размерами: \begin{equation} H_{out} = (H_{in} - 1)stride_h - 2pad_h + dil_h(size_h - 1) + 1 \end{equation}

\begin{equation} W_{out} = (W_{in} - 1)stride_w - 2pad_w + dil_w(size_w - 1) + 1 \end{equation}

size - фильтры всегда квадратные, т.е. (size_h, size_w), где size_h == size_w;


stride - возможна передача как единой величины шага свёртки по высоте и ширине, так и tuple вида (stride_h, stride_w), где stride_h - величина шага свёртки вдоль высоты картинки, и stride_w - вдоль ширины;


pad - возможна передача как единой величины отступа для всех сторон карт, так и tuple вида (pad_h, pad_w), где pad_h - величина отступа с каждой стороны вдоль высоты картинки, и pad_w - вдоль ширины;


dilation - возможна передача как единой величины разрежения для всех сторон ядра свёртки, так и tuple вида (dil_h, dil_w), где dil_h - величина разрежения фильтра вдоль высоты картинки, и dil_w - вдоль ширины;


groups - количество групп, на которое разбивается множество карт для того, чтобы быть свернуто независимо друг от друга.

Общее правило звучит так (при этом надо учитывать, что значения параметров inmaps и outmaps должны целочисленно делиться на значение параметра groups): из каждых \frac{inmaps}{groups} входных карт формируются \frac{outmaps}{groups} выходных карт.

Примеры

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

>>> import numpy as np
>>> from PuzzleLib.Backend import gpuarray
>>> from PuzzleLib.Modules import Deconv2D
>>> from PuzzleLib.Variable import Variable

Info

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

>>> batchsize, inmaps, h, w = 1, 2, 5, 5
>>> outsize = 2
>>> data = gpuarray.to_gpu(np.arange(batchsize * inmaps * h * w).reshape((batchsize, inmaps, h, w)).astype(np.float32))
>>> deconv = Deconv2D(inmaps=inmaps, outmaps=outsize, size=2, useBias=False)
>>> deconv(data)

Параметр size


>>> deconv = Deconv2D(inmaps=inmaps,outmaps=outsize, size=3, useBias=False)
>>> deconv(data)

Параметр pad


>>> deconv = Deconv2D(inmaps=inmaps,outmaps=outsize, size=3, pad=1, useBias=False)
>>> deconv(data)

Параметр stride


>>> deconv = Deconv2D(inmaps=inmaps, outmaps=outsize, size=2, stride=2, useBias=False)
>>> deconv(data)
>>> deconv = Deconv2D(inmaps=inmaps, outmaps=outsize, size=2, stride=2, pad=3, useBias=False)
>>> deconv(data)
>>> deconv = Deconv2D(inmaps=inmaps, outmaps=outsize, size=2, stride=(2, 4), pad=3, useBias=False)
>>> deconv(data)

Параметр dilation


>>> deconv = Deconv2D(inmaps=inmaps, outmaps=outsize, size=2, stride=1, pad=0, dilation=2, useBias=False)
>>> deconv(data)
>>> deconv = Deconv2D(inmaps=inmaps, outmaps=outsize, size=2, stride=1, pad=0, dilation=(3, 1), useBias=False)
>>> deconv(data)

Параметр groups


>>> deconv = Deconv2D(inmaps=inmaps, outmaps=outsize, size=2, groups=2, useBias=False)
>>> deconv(data)