Это не проблема вещания.b
- это обычный массив JavaScript.В этом случае это массив тензорных.Чтобы использовать b в операциях dot
или matMul
, b должен быть тензором.Это не тот случай, здесь.Для операции matMul
, учитывая два тензора x (shape [p,q])
, y (shape [r, s])
, q должно быть равно r.Это само определение умножения матриц, т. Е. Для matMul нет широковещательной передачи ни в tenorflow.js, ни в tenorflow.py.Точечная операция очень похожа.Единственное отличие состоит в том, что один операнд может быть матрицей, а второй - вектором.
Обратите внимание на следующее: для простоты то, что в скобках, является тензором этой формы.
[4, 5].matMul([5, 6]) = [4, 5].dot([5, 4]) => [4, 6]
[4, 5].matMul([4, 5]) => error
из-за 4 и 5 (то есть, зачем делать квадрат матрицы, иногда определяется как произведение между матрицей и ее транспонированием. Для данной матрицы A, A * A не всегда может быть вычислено, если только Aквадратная матрица)
[5].dot([5, 4]) => [4]
[5, 4].dot([4]) => [5, 1]
[5].dot([4, 5]) => error
[5, 4].dot([5]) => error
Чтобы вычислить произведение b и a, вам нужно будет выполнить итерацию по b и выполнить операцию matMul.
a = tf.tensor2d([1, 0, 0, 2], [2, 2])
// there is much simpler way to create an array of 10 tensors without apply function
const b = Array.from({length:10}, _ => tf.tensor2d([[Math.floor(Math.random() * 100)], [Math.floor(Math.random() * 100)]]))
// Matmul operation
const prod = b.map(t => a.matMul(t))
prod.forEach(t => t.print())
<html>
<head>
<!-- Load TensorFlow.js -->
<script src="https://cdn.jsdelivr.net/npm/@tensorflow/tfjs@0.12.0"> </script>
</head>
<body>
</body>
</html>