В библиотеке TensorFlow.js tf.matMul используется для
выполнения матричного умножения двух тензоров. Эта операция является
фундаментальной для многих алгоритмов машинного обучения, включая
нейронные сети, где она применяется для вычисления линейных комбинаций
входных данных и весов.
tf.matMul(a, b, transposeA = false, transposeB = false)
Аргументы:
a — первый тензор. Должен быть двумерным или более
высокой размерности (в случае батчевого умножения).b — второй тензор. Размерности должны быть совместимы с
размерностями a.transposeA — булевый флаг, указывающий, следует ли
транспонировать тензор a перед умножением. По умолчанию
false.transposeB — булевый флаг для транспонирования тензора
b. По умолчанию false.Возвращаемое значение: новый тензор, являющийся результатом матричного умножения.
Матрицы умножаются по правилу: число столбцов первой матрицы должно
совпадать с числом строк второй. Если A имеет размерность
[m, n], а B — [n, p], результат
tf.matMul(A, B) будет иметь форму [m, p].
Пример базового умножения:
const a = tf.tensor2d([[1, 2], [3, 4]]);
const b = tf.tensor2d([[5, 6], [7, 8]]);
const c = tf.matMul(a, b);
c.print(); // [[19, 22], [43, 50]]
Здесь выполняется стандартное умножение матриц:
[ ]
Параметры transposeA и transposeB позволяют
изменить ориентацию матриц перед вычислением. Это полезно, когда данные
изначально представлены в «неправильной» форме.
Пример:
const a = tf.tensor2d([[1, 2], [3, 4]]);
const b = tf.tensor2d([[5, 6], [7, 8]]);
const c = tf.matMul(a, b, true, false);
c.print(); // [[26, 30], [38, 44]]
В данном случае a транспонируется и становится
[ [1,3], [2,4] ], что изменяет результат умножения.
tf.matMul поддерживает многомерные тензоры, где первые
размерности рассматриваются как батчи. Это позволяет эффективно
обрабатывать сразу несколько пар матриц.
Пример батчевого умножения:
const a = tf.tensor3d([[[1, 2], [3, 4]], [[5, 6], [7, 8]]]); // shape [2, 2, 2]
const b = tf.tensor3d([[[1, 0], [0, 1]], [[1, 1], [1, 1]]]); // shape [2, 2, 2]
const c = tf.matMul(a, b);
c.print();
// [[[1, 2], [3, 4]], [[11, 11], [15, 15]]]
Здесь первая размерность [2] представляет две отдельные
матрицы для умножения в одном вызове.
TensorFlow.js использует WebGL и WebGPU для ускорения операций с
тензорами на GPU. tf.matMul автоматически оптимизирует
вычисления в зависимости от устройства:
tf.tidy для управления
памятью.z = X·W + b
для линейного слоя.im2col.tf.matMultf.transpose() — ручное транспонирование тензора перед
умножением.tf.add() или tf.addN() — добавление
смещения после умножения.tf.tidy() — управление жизненным циклом тензоров для
оптимизации памяти.Матрица-умножение является ядром многих алгоритмов, поэтому понимание
всех нюансов tf.matMul позволяет эффективно строить модели
и оптимизировать вычисления в TensorFlow.js.