DepthConcat¶
Описание¶
Данный модуль работает с тензорами размерности (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.
np.random.seed(123)
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)
[[[[2. 2.]
[6. 1.]]]]
print(data2)
[[[[3. 6. 1. 0. 1. 0.]
[0. 3. 4. 0. 0. 4.]
[1. 7. 3. 2. 4. 7.]
[2. 4. 8. 0. 7. 3.]
[4. 6. 1. 5. 6. 2.]
[1. 8. 3. 5. 0. 2.]]]]
print(data3)
[[[[6. 2. 4.]
[4. 6. 3.]
[0. 6. 4.]
[7. 6. 7.]]]]
concat = DepthConcat()
data = concat([data1, data2, data3])
print(data)
[[[[0. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 0.]
[0. 0. 2. 2. 0. 0.]
[0. 0. 6. 1. 0. 0.]
[0. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 0.]]
[[3. 6. 1. 0. 1. 0.]
[0. 3. 4. 0. 0. 4.]
[1. 7. 3. 2. 4. 7.]
[2. 4. 8. 0. 7. 3.]
[4. 6. 1. 5. 6. 2.]
[1. 8. 3. 5. 0. 2.]]
[[0. 0. 0. 0. 0. 0.]
[0. 6. 2. 4. 0. 0.]
[0. 4. 6. 3. 0. 0.]
[0. 0. 6. 4. 0. 0.]
[0. 7. 6. 7. 0. 0.]
[0. 0. 0. 0. 0. 0.]]]]
print(data.shape)
<div class="output">