Sum

Описание

Info

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

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

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

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

def __init__(self, axis, useWeights=True, name=None):

Параметры

Параметр Возможные типы Описание По умолчанию
axis int Номер оси, вдоль которой производится суммирование -
useWeights bool Флаг учёта тензора весов при суммировании True
name str Имя слоя None

Пояснения

useWeights

Использование весов возможно только для трёхмерных тензоров.

Примеры

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

import numpy as np
from PuzzleLib.Backend import gpuarray
from PuzzleLib.Modules import Sum

batchsize, groups, size = 2, 3, 4
np.random.seed(1234)
data = gpuarray.to_gpu(np.random.randint(0, 9, (batchsize, groups, size)).astype(np.float32))
print(data)
[[[3. 6. 5. 4.]
  [8. 1. 7. 6.]
  [8. 0. 5. 0.]]

 [[6. 2. 0. 5.]
  [2. 6. 3. 7.]
  [0. 0. 3. 2.]]]

Инициализируем модуль с суммированием вдоль оси groups:

summod = Sum(axis=1, useWeights=False)
print(summod(data))
[[19.  7. 17. 10.]
 [ 8.  8.  6. 14.]]
print(summod.data.shape)
(2, 4)

Поменяем ось суммирования:

summod = Sum(axis=2, useWeights=False)
print(summod(data))
[[18. 22. 13.]
 [13. 18.  5.]]
print(summod.data.shape)
(2, 3)

Тензор весов должен быть на одну размерность меньше, чем размерность данных:

weights = gpuarray.to_gpu(np.random.randint(1, 3, (batchsize, groups)).astype(np.float32))
print(weights)
[[2. 1. 2.]
 [2. 2. 2.]]
summod = Sum(axis=1, useWeights=True)
print(summod([data, weights]))
[[30. 13. 27. 14.]
 [16. 16. 12. 28.]]
print(summod.data.shape)
(2, 4)