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