TensorFlow.js предоставляет мощный инструмент для работы с многомерными данными в формате тензоров, а также позволяет создавать переменные, которые играют ключевую роль при построении и обучении нейронных сетей. Понимание различий между тензорами и переменными критично для корректного использования библиотеки.
Тензор — это основной объект данных в TensorFlow.js. Он представляет собой многомерный массив, аналогичный массиву NumPy в Python. Тензоры обладают фиксированными значениями и структурой.
Ключевые характеристики тензоров:
float32, int32, bool и
complex64.Пример создания тензора:
const tf = require('@tensorflow/tfjs');
// Создание 1D тензора
const vector = tf.tensor([1, 2, 3, 4]);
// Создание 2D тензора
const matrix = tf.tensor([[1, 2], [3, 4]]);
Любые операции, например сложение или умножение, возвращают новый тензор, не изменяя исходный:
const a = tf.tensor([1, 2]);
const b = tf.tensor([3, 4]);
const c = a.add(b); // c = [4, 6], a и b остаются неизменными
Переменная в TensorFlow.js
(tf.Variable) — это объект, который хранит тензор и
допускает изменение его значений в процессе выполнения
программы. Переменные особенно полезны для хранения весов и смещений
нейронных сетей, которые изменяются в ходе обучения.
Ключевые характеристики переменных:
.assign() заменяет
содержимое переменной новым тензором, .assignAdd() и
.assignSub() выполняют добавление и вычитание
соответственно.Пример создания переменной:
// Создание переменной на основе 1D тензора
const weight = tf.variable(tf.tensor([0.5, 0.5]));
// Обновление значения переменной
weight.assign(tf.tensor([1.0, 1.0]));
// Добавление к текущему значению
weight.assignAdd(tf.tensor([0.1, 0.1])); // Теперь weight = [1.1, 1.1]
| Характеристика | Тензор (tf.Tensor) |
Переменная (tf.Variable) |
|---|---|---|
| Изменяемость | Нет (immutable) | Да (mutable) |
| Создание | tf.tensor() |
tf.variable(tf.tensor()) |
| Использование в обучении | Хранение данных | Хранение параметров модели |
| Методы обновления | Не поддерживаются | .assign(), .assignAdd(),
.assignSub() |
| Место в памяти | Любая доступная память (CPU/GPU) | Любая доступная память (CPU/GPU) |
| Поведение при операциях | Любая операция создаёт новый тензор | Можно изменять содержимое существующей переменной |
Использование тензоров для вычислений: Тензоры применяются там, где нужны промежуточные вычисления или данные, которые не изменяются в процессе работы сети.
Использование переменных для параметров модели: Все обучаемые параметры модели — веса и смещения слоёв — создаются как переменные. Оптимизаторы обновляют их значения на основе градиентов.
Эффективность памяти: Использование переменных
позволяет избежать постоянного создания новых объектов и уменьшает
нагрузку на сборщик мусора. Тензоры создаются и уничтожаются чаще,
поэтому важно следить за освобождением памяти при больших вычислениях с
помощью tf.tidy().
Правильное различение этих двух объектов позволяет эффективно строить нейронные сети и управлять памятью в TensorFlow.js, обеспечивая стабильность и производительность приложений.