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)
>>> summod(data)
[[19.  7. 17. 10.]
 [ 8.  8.  6. 14.]]
>>> print(summod.data.shape)
(2, 4)

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

>>> summod = Sum(axis=2, useWeights=False)
>>> 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)
>>> summod([data, weights])
[[30. 13. 27. 14.]
 [16. 16. 12. 28.]]
>>> print(summod.data.shape)
(2, 4)