TensorFlow.js — это библиотека для работы с машинным обучением в JavaScript, позволяющая создавать, обучать и запускать модели как в браузере, так и на серверной стороне через Node.js. В среде Node.js она открывает возможности полноценной серверной обработки данных, ускорения вычислений с использованием GPU и интеграции моделей машинного обучения в backend-приложения.
Для работы с TensorFlow.js в Node.js используется пакет
@tensorflow/tfjs-node или
@tensorflow/tfjs-node-gpu для ускорения вычислений с
поддержкой CUDA. Установка производится через npm:
npm install @tensorflow/tfjs-node
или с поддержкой GPU:
npm install @tensorflow/tfjs-node-gpu
После установки модуль импортируется следующим образом:
const tf = require('@tensorflow/tfjs-node');
Важный момент: @tensorflow/tfjs-node включает в себя
бинарные зависимости для работы с нативными ускорителями, поэтому
установка может потребовать наличия корректных версий Python и C++
компилятора для сборки. На Windows рекомендуется иметь Visual Studio
Build Tools, на Linux — gcc и g++ последних версий.
Тензоры — базовая структура в TensorFlow.js. Тензор
представляет собой многомерный массив чисел с определённой формой
(shape) и типом данных (dtype).
const a = tf.tensor([1, 2, 3, 4], [2, 2]);
console.log(a.shape); // [2, 2]
console.log(a.dtype); // 'float32'
Типы тензоров:
tf.scalar(value) — скаляр, тензор 0-й размерности.tf.tensor1d(array) — вектор.tf.tensor2d(array, [rows, cols]) — матрица.tf.tensor3d и tf.tensor4d — многомерные
массивы для работы с изображениями и видео.Все операции с тензорами в TensorFlow.js ленивые и оптимизированные. Операции создают новые тензоры, не изменяя исходные данные, что позволяет избежать непреднамеренных побочных эффектов.
В Node.js поддерживаются как послойные модели, так и функциональные модели.
Слоевая модель (Sequential):
const model = tf.sequential();
model.add(tf.layers.dense({units: 32, inputShape: [10], activation: 'relu'}));
model.add(tf.layers.dense({units: 1, activation: 'linear'}));
Функциональная модель (Functional API):
const input = tf.input({shape: [10]});
const hidden = tf.layers.dense({units: 32, activation: 'relu'}).apply(input);
const output = tf.layers.dense({units: 1}).apply(hidden);
const model = tf.model({inputs: input, outputs: output});
model.compile({
optimizer: tf.train.adam(0.001),
loss: tf.losses.meanSquaredError,
metrics: ['mse']
});
Node.js позволяет использовать большие датасеты, загруженные с диска или получаемые по сети, благодаря поддержке асинхронных итераторов.
const xs = tf.tensor2d([[1, 2], [3, 4], [5, 6]]);
const ys = tf.tensor2d([[1], [3], [5]]);
async function train() {
await model.fit(xs, ys, {
epochs: 100,
batchSize: 2,
callbacks: {
onEpochEnd: (epoch, logs) => {
console.log(`Эпоха ${epoch}: ошибка = ${logs.loss}`);
}
}
});
}
train();
Особенность Node.js — возможность обучать модели на GPU, что значительно ускоряет процесс при больших данных и сложных нейронных сетях.
Модели можно сохранять локально или загружать из файловой системы.
// Сохранение модели
await model.save('file://./my-model');
// Загрузка модели
const loadedModel = await tf.loadLayersModel('file://./my-model/model.json');
Формат file:// указывает на локальную файловую систему
Node.js. Поддерживаются также форматы HTTP/HTTPS для загрузки моделей из
сети.
Node.js предоставляет прямой доступ к файловой системе, что упрощает обработку CSV, JSON и бинарных данных.
const fs = require('fs');
const data = fs.readFileSync('data.csv', 'utf8');
TensorFlow.js содержит утилиты для преобразования данных:
const dataset = tf.data.csv('file://data.csv', {
columnConfigs: {
label: {isLabel: true}
}
});
Метод tf.data позволяет создавать потоковые датасеты,
комбинировать, перемешивать и батчить данные.
@tensorflow/tfjs-node-gpu поддерживает CUDA и cuDNN. При
установке система автоматически выбирает доступный GPU, ускоряя операции
матричных умножений и свёрточных слоёв. Для проверки:
console.log(tf.getBackend()); // 'tensorflow'
Backend tensorflow в Node.js отличается от браузерного
webgl и использует нативные библиотеки.
В Node.js можно интегрировать TensorFlow.js с Express или другими web-фреймворками для построения API, возвращающих предсказания модели.
Node.js работает с большими объемами данных, поэтому важно освобождать тензоры:
const y = tf.tidy(() => {
const x = tf.tensor([1, 2, 3, 4]);
return x.square();
});
tf.tidy автоматически удаляет промежуточные тензоры
после выполнения функции, предотвращая утечки памяти. Для контроля
памяти используется метод tf.memory().
Многие методы TensorFlow.js в Node.js возвращают промисы, особенно при загрузке данных и моделей. Это позволяет интегрировать библиотеку в асинхронный код и эффективно работать с большими объемами данных.
TensorFlow.js в Node.js обеспечивает мощный инструмент для построения машинного обучения на серверной стороне, сочетая удобство JavaScript с производительностью нативного кода. Это делает возможным разработку полноценных ML-приложений, доступных для веб-сервисов, API и аналитических платформ.