Deconv3D¶
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}, D_{in}, H_{in}, W_{in}) и выходного (N, C_{out}, D_{out}, H_{out}, W_{out}) тензоров существует зависимость между их размерами:
\begin{equation} D_{out} = (D_{in} - 1)stride_d - 2pad_d + dil_d(size_d - 1) + 1 \end{equation}
\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_d, size_h, size_w)
, где size_d == size_h == size_w
;
stride
- возможна передача как единой величины шага свёртки вдоль всех осей карт, так и tuple вида (stride_d, stride_h, stride_w)
, где stride_h
- величина шага свёртки вдоль глубины карты, stride_h
- величина шага свёртки вдоль высоты карты, а stride_w
- вдоль ширины;
pad
- возможна передача как единой величины отступа для всех сторон карт, так и tuple вида (pad_d, pad_h, pad_w)
, где pad_d
- величина отступа с каждой стороны вдоль глубины карты, pad_h
- вдоль высоты карты, а pad_w
- вдоль ширины;
dilation
- возможна передача как единой величины разрежения для всех сторон ядра свёртки, так и tuple вида (dil_d, dil_h, dil_w)
, где dil_d
- величина разрежения фильтра вдоль глубины карты, 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 Deconv3D
Info
gpuarray
необходим для правильного размещения тензора на GPU
batchsize, inmaps, d, h, w = 1, 2, 5, 5, 5
outmaps = 2
data = gpuarray.to_gpu(np.arange(batchsize * inmaps * d * h * w).reshape((batchsize, inmaps, d, h, w)).astype(np.float32))
deconv = Deconv3D(inmaps=inmaps, outmaps=outmaps, size=2, useBias=False)
print(deconv(data))
Параметр size¶
deconv = Deconv3D(inmaps=inmaps, outmaps=outmaps, size=3, useBias=False)
print(deconv(data))
Параметр pad¶
deconv = Deconv3D(inmaps=inmaps, outmaps=outmaps, size=3, pad=1, useBias=False)
print(deconv(data))
Параметр stride¶
deconv = Deconv3D(inmaps=inmaps, outmaps=outmaps, size=2, stride=2, useBias=False)
print(deconv(data))
deconv = Deconv3D(inmaps=inmaps, outmaps=outmaps, size=2, stride=2, pad=3, useBias=False)
print(deconv(data))
deconv = Deconv3D(inmaps=inmaps, outmaps=outmaps, size=2, stride=(2, 4, 2), pad=3, useBias=False)
print(deconv(data))
Параметр dilation¶
deconv = Deconv3D(inmaps=inmaps, outmaps=outmaps, size=2, stride=1, pad=0, dilation=2, useBias=False)
print(deconv(data))
deconv = Deconv3D(inmaps=inmaps, outmaps=outmaps, size=2, stride=1, pad=0, dilation=(3, 1, 3), useBias=False)
print(deconv(data))
Параметр groups¶
deconv = Deconv3D(inmaps=inmaps, outmaps=outmaps, size=2, groups=2, useBias=False)
print(deconv(data))