TensorFlow.js предоставляет набор инструментов для работы с
многомерными массивами данных (тензорами) и выполнения над ними
арифметических операций. Основной объект библиотеки —
tf.Tensor, который является фундаментальной структурой
данных. Арифметические операции применяются к тензорам
элемент-wise, что означает, что операция выполняется
отдельно для каждого элемента соответствующих массивов.
Тензоры создаются с помощью функции tf.tensor, которая
принимает массив значений и необязательный параметр формы (shape):
const a = tf.tensor([1, 2, 3, 4]);
const b = tf.tensor([[1, 2], [3, 4]]);
Ключевой момент: если форма массива не указана, она
выводится автоматически из вложенности массива. В
TensorFlow.js поддерживаются тензоры до 6 измерений.
Для сложения используется метод tf.add:
const x = tf.tensor([1, 2, 3]);
const y = tf.tensor([4, 5, 6]);
const z = tf.add(x, y); // Результат: [5, 7, 9]
Вычитание выполняется с помощью tf.sub:
const w = tf.sub(y, x); // Результат: [3, 3, 3]
Особенности:
Для умножения используется tf.mul, для деления —
tf.div:
const a = tf.tensor([1, 2, 3]);
const b = tf.tensor([4, 5, 6]);
const mulResult = tf.mul(a, b); // [4, 10, 18]
const divResult = tf.div(b, a); // [4, 2.5, 2]
Особенности:
tf.mul и tf.div выполняют
поэлементные операции, а не матричные.tf.matMul.Для возведения тензора в степень применяется tf.pow:
const t = tf.tensor([2, 3, 4]);
const tSquared = tf.pow(t, 2); // [4, 9, 16]
Также поддерживается возведение в тензорную степень:
const t2 = tf.tensor([1, 2, 3]);
const result = tf.pow(t, t2); // [2^1, 3^2, 4^3] -> [2, 9, 64]
TensorFlow.js содержит ряд встроенных функций для преобразования тензоров:
tf.abs(t) — абсолютное значениеtf.neg(t) — отрицаниеtf.sqrt(t) — квадратный кореньtf.exp(t) — экспонентаtf.log(t) — натуральный логарифмconst t = tf.tensor([-1, 4, 9]);
const sqrtT = tf.sqrt(tf.abs(t)); // [1, 2, 3]
Ключевой момент: эти функции поддерживают поэлементные вычисления и broadcasting.
Арифметические операции можно комбинировать в цепочки:
const a = tf.tensor([1, 2, 3]);
const b = tf.tensor([4, 5, 6]);
const c = tf.tensor([7, 8, 9]);
const result = tf.add(tf.mul(a, b), c); // a * b + c -> [11, 18, 27]
При сложных вычислениях важно следить за памятью
GPU, так как каждый промежуточный тензор занимает память до
вызова dispose() или завершения блока.
Для двумерных тензоров (матриц) применяются как
поэлементные операции, так и матричное умножение:
const m1 = tf.tensor2d([[1, 2], [3, 4]]);
const m2 = tf.tensor2d([[5, 6], [7, 8]]);
const elementWise = tf.add(m1, m2); // [[6, 8], [10, 12]]
const matMul = tf.matMul(m1, m2); // [[19, 22], [43, 50]]
Разница: tf.add выполняет сложение поэлементно,
tf.matMul — классическое матричное умножение.
Broadcasting позволяет автоматически согласовывать формы тензоров при арифметических операциях. Пример:
const a = tf.tensor([[1, 2], [3, 4]]);
const b = tf.tensor([10, 20]);
const result = tf.add(a, b); // [[11, 22], [13, 24]]
Правила broadcasting:
TensorFlow.js работает как на CPU, так и на GPU. Каждый тензор занимает память до явного освобождения:
const t = tf.tensor([1, 2, 3]);
// используем t для операций
t.dispose(); // освобождает память
Для автоматического управления можно использовать блоки
tf.tidy:
const result = tf.tidy(() => {
const a = tf.tensor([1, 2, 3]);
const b = tf.tensor([4, 5, 6]);
return tf.add(a, b); // a и b будут автоматически освобождены
});
tf.add, tf.mul, tf.pow) для
операций на одинаковых или broadcast-совместимых тензорах.tf.matMul вместо поэлементного
умножения.dispose или
tf.tidy.Арифметические операции в TensorFlow.js обеспечивают гибкость и скорость благодаря поддержке GPU и оптимизированным вычислительным ядрам, делая библиотеку подходящей для сложных численных и машинно-обучающих задач.