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))