Deconv1D

Warning

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

Описание

Info

Родительский класс: 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 int, tuple Шаг свёртки. 1
pad int, tuple Паддинг карт. 0
dilation int Разрежение окна свёртки. 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}, L_{in}) и выходного (N, C_{out}, L_{out}) тензоров существует зависимость между их размерами: \begin{equation} L_{out} = (L_{in} - 1)stride - 2pad + dil(size - 1) + 1 \end{equation}


pad - возможна передача только единой величины отступа для всех сторон карт;


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

По умолчанию каждая выходная карта взаимодействует со всеми входными картами (groups=1).

Если группы две, операция становится эквивалентна двум слоям свертки, каждый из которых видит половину входных каналов другого и производит половину выходных каналов. Каждая из этих выходных последовательностей затем выстраивается друг за другом.

Если количество групп совпадает с количеством входных карт, каждый канал сворачивается со своим собственным набором ядер размера (\frac{outmaps}{inmaps})

Значения параметров inmaps и outmaps должны делиться на значение параметра groups.

Примеры

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

>>> import numpy as np
>>> from PuzzleLib.Backend import gpuarray
>>> from PuzzleLib.Modules import Deconv1D

Info

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

>>> batchsize, inmaps, l = 1, 2, 5
>>> outsize = 2

Синтетический тензор:

>>> data = gpuarray.to_gpu(np.arange(batchsize * inmaps * l).reshape((batchsize, inmaps, l)).astype(np.float32))
>>> deconv = Deconv1D(inmaps=inmaps, outmaps=outsize, size=2, useBias=False)
>>> deconv(data)


Параметр size


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

Параметр pad


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

Параметр stride


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

Параметр dilation


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

Параметр groups


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