Sum¶
Описание¶
Этот модуль выполняет функцию вычисления суммы элементов тензора вдоль заданной оси.
Инициализация¶
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)