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
outmaps = 2

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

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


Параметр size


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

Параметр pad


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

Параметр stride


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

Параметр dilation


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

Параметр groups


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