Glue¶
Danger
Документирование модуля не завершено и может содержать неточности.
Описание¶
Данный модуль реализует операцию склейки значений тензоров.
Инициализация¶
def __init__(self, modules=None, fwdGlue=None, bwdGlue=None, fwdShapeGlue=None, bwdShapeGlue=None, name=None):
Параметры
Параметр | Возможные типы | Описание | По умолчанию |
---|---|---|---|
modules | dict | Используемые модули | None |
fwdGlue | function | Функция работы при прямом распространении потока информации | None |
bwdGlue | function | Функция работы при обратном распространении потока информации | None |
fwdShapeGlue | tuple | Размерность при прямом потоке | None |
bwdShapeGlue | tuple | Размерность при обратном потоке | None |
name | str | Имя слоя | None |
Пояснения
modules
- словарь задается следующим образом: ключом является название применяемой операции, значением - экземпляр соотвествующего класса операции со всеми требуемыми параметрами (см. Примеры).
Примеры¶
Необходимые импорты.
import numpy as np
from PuzzleLib.Backend import gpuarray
from PuzzleLib.Modules import Glue
Формируем три тензора данных.
batchsize, maps, h, w = 1, 1, 2, 2
h1, w1 = 10, 10
data1 = gpuarray.to_gpu(np.arange(batchsize * maps * h * w).reshape((batchsize, maps, h, w)).astype(np.float32))
data2 = gpuarray.to_gpu(np.arange(batchsize * maps * h * w).reshape((batchsize, maps, h, w)).astype(np.float32))
data3 = gpuarray.to_gpu(np.arange(h1 * w1).reshape((h1, w1)).astype(np.float32))
Задаем функции склейки для данных и градиента.
def fwdGlue(data, modules):
dat1, dat2, dat3 = data
split = modules["split"]
out1, out2 = split(data3)
return [dat1 + dat2, out1, out2]
def bwdGlue(grad, modules):
gr1, gr2, gr3 = grad
split = modules["split"]
split.backward([gr2, gr3])
return [gr1, gr1, split.grad]
from PuzzleLib.Modules.Split import Split
glue = Glue(fwdGlue=fwdGlue, bwdGlue=bwdGlue, modules={"split": Split(axis=1, sections=(5, 5))})
glue([data1, data2, data3])