DepthConcat

Описание

Info

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

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

Данный модуль работает с тензорами размерности (N, C, H, W), где N - размер батча, C - количество карт (каналов), H - высота карты, W - ширина карты. Отличие от Concat в том, что модуль склеивает тензоры только вдоль оси каналов, но делает это даже для тех тензоров, у которых отличается размер карт (см. пример).

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

def __init__(self, name=None):

Параметры

Параметр Возможные типы Описание По умолчанию
name str Имя слоя. None

Пояснения

-

Примеры

Необходимые импорты.

>>> import numpy as np
>>> from PuzzleLib.Backend import gpuarray
>>> from PuzzleLib.Modules import DepthConcat

Info

gpuarray необходим для правильного размещения тензора на GPU

Для удобства ограничимся размером батча и количеством карт 1.

>>> data1 = gpuarray.to_gpu(np.random.randint(0, 9, (1, 1, 2, 2)).astype(np.float32))
>>> data2 = gpuarray.to_gpu(np.random.randint(0, 9, (1, 1, 6, 6)).astype(np.float32))
>>> data3 = gpuarray.to_gpu(np.random.randint(0, 9, (1, 1, 4, 3)).astype(np.float32))
>>> print(data1)
[[[[5. 7.]
   [6. 7.]]]]
>>> print(data2)
[[[[2. 7. 3. 1. 0. 4.]
   [3. 6. 4. 6. 7. 6.]
   [6. 7. 8. 7. 8. 4.]
   [2. 4. 7. 3. 1. 3.]
   [4. 8. 2. 5. 0. 3.]
   [4. 0. 2. 8. 1. 3.]]]]
>>> print(data3)
[[[[7. 7. 7.]
   [4. 1. 7.]
   [6. 5. 2.]
   [3. 7. 6.]]]]
>>> concat = DepthConcat()
>>> cocnat([data1, data2, data3])
[[[[0. 0. 0. 0. 0. 0.]
   [0. 0. 0. 0. 0. 0.]
   [0. 0. 5. 7. 0. 0.]
   [0. 0. 6. 7. 0. 0.]
   [0. 0. 0. 0. 0. 0.]
   [0. 0. 0. 0. 0. 0.]]

  [[2. 7. 3. 1. 0. 4.]
   [3. 6. 4. 6. 7. 6.]
   [6. 7. 8. 7. 8. 4.]
   [2. 4. 7. 3. 1. 3.]
   [4. 8. 2. 5. 0. 3.]
   [4. 0. 2. 8. 1. 3.]]

  [[0. 0. 0. 0. 0. 0.]
   [0. 7. 7. 7. 0. 0.]
   [0. 4. 1. 7. 0. 0.]
   [0. 6. 5. 2. 0. 0.]
   [0. 3. 7. 6. 0. 0.]
   [0. 0. 0. 0. 0. 0.]]]]
>>> print(concat.data.shape)
(1, 3, 6, 6)