Deconv1D¶
Warning
Документация к модулю находится в разработке.
Описание¶
Этот модуль реализует операцию одномерной транспонированной свёртки. Для более подробной теоретической информации об этой операции см. 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))