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