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
outmaps = 2
data = gpuarray.to_gpu(np.arange(batchsize * inmaps * h * w).reshape((batchsize, inmaps, h, w)).astype(np.float32))
deconv = Deconv2D(inmaps=inmaps, outmaps=outmaps, size=2, useBias=False)
print(deconv(data))

Параметр size


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

Параметр pad


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

Параметр stride


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

Параметр dilation


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

Параметр groups


deconv = Deconv2D(inmaps=inmaps, outmaps=oumaps, size=2, groups=2, useBias=False)
print(deconv(data))