Glue

Danger

Документирование модуля не завершено и может содержать неточности.

Описание

Info

Родительский класс: Module

Производные классы: -

Данный модуль реализует операцию склейки значений тензоров.

Инициализация

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