Функция addmm
Функция addmm выполняет операцию beta * self + alpha * (mat1 @ mat2).
Она принимает три тензора: входной тензор, первый множитель и второй множитель.
Результатом является новый тензор той же размерности, что и входной тензор.
Функция полезна при реализации полносвязных слоёв, где нужно объединить умножение матриц и сложение с bias.
Синтаксис
torch.addmm(input, mat1, mat2, beta=1, alpha=1)
Параметры:
- input - тензор, который будет добавлен к результату;
- mat1 - первый множитель (матрица);
- mat2 - второй множитель (матрица);
- beta - множитель для входного тензора (по умолчанию 1);
- alpha - множитель для произведения матриц (по умолчанию 1).
Пример
Выполним простейшее матричное умножение с добавлением:
import torch
input_t = torch.tensor([1, 2, 3])
mat1 = torch.tensor([[1, 2], [3, 4], [5, 6]])
mat2 = torch.tensor([[7, 8, 9], [10, 11, 12]])
res = torch.addmm(input_t, mat1, mat2)
print(res)
Результат выполнения кода:
tensor([[ 28, 32, 36],
[ 62, 72, 82],
[ 96, 112, 128]])
Пример
Используем параметры beta и alpha для масштабирования слагаемых:
import torch
input_t = torch.tensor([1, 2, 3], dtype=torch.float)
mat1 = torch.tensor([[1., 2.], [3., 4.], [5., 6.]])
mat2 = torch.tensor([[7., 8., 9.], [10., 11., 12.]])
res = torch.addmm(input_t, mat1, mat2, beta=2, alpha=3)
print(res)
Результат выполнения кода:
tensor([[ 44., 50., 56.],
[ 95., 110., 125.],
[146., 170., 194.]])
Пример
Используем addmm для вычисления выходов полносвязного слоя с bias:
import torch
torch.manual_seed(0)
x = torch.randn(3, 4)
weights = torch.randn(5, 4)
bias = torch.randn(5)
out = torch.addmm(bias, weights, x.t())
print(out.shape)
Результат выполнения кода:
torch.Size([5, 3])