Для работы с TensorFlow.js в браузере достаточно подключить библиотеку через CDN:
<script src="https://cdn.jsdelivr.net/npm/@tensorflow/tfjs@latest"></script>
В Node.js используется установка через npm:
npm install @tensorflow/tfjs
Подключение в коде:
const tf = require('@tensorflow/tfjs');
TensorFlow.js поддерживает несколько бэкендов: WebGL для ускорения на GPU в браузере и CPU для универсального исполнения.
Обучение на сервере позволяет использовать мощные вычислительные ресурсы, такие как GPU или TPU. Это особенно важно при работе с большими наборами данных и сложными нейронными сетями.
Этапы обучения:
Подготовка данных Для обучения необходимо представить данные в виде тензоров. TensorFlow.js предоставляет функции для преобразования массивов и изображений в тензоры:
const xs = tf.tensor2d([[1, 2], [3, 4], [5, 6]]);
const ys = tf.tensor2d([[1], [3], [5]]);Создание модели Используются слои
tf.layers, которые формируют последовательность или
функциональную модель:
const model = tf.sequential();
model.add(tf.layers.dense({units: 10, activation: 'relu', inputShape: [2]}));
model.add(tf.layers.dense({units: 1}));Компиляция модели Указывается оптимизатор, функция потерь и метрики:
model.compile({
optimizer: 'sgd',
loss: 'meanSquaredError',
metrics: ['mse']
});Обучение модели Обучение выполняется с помощью
метода fit или fitDataset для больших
данных:
await model.fit(xs, ys, {
epochs: 50,
batchSize: 2,
callbacks: {
onEpochEnd: (epoch, logs) => console.log(`Эпоха ${epoch}: потеря = ${logs.loss}`)
}
});Сохранение модели После обучения модель можно сохранить на сервере в формате JSON и бинарных весов:
await model.save('file://./model');Сохранение на сервере особенно удобно, если инференс планируется выполнять в браузере. Модель загружается клиентом через HTTP.
После обучения на сервере модель доступна для использования в браузере. Это снижает нагрузку на сервер и позволяет выполнять предсказания непосредственно на устройстве пользователя.
Загрузка модели:
const model = await tf.loadLayersModel('https://example.com/model/model.json');
Предсказание:
const input = tf.tensor2d([[7, 8]]);
const output = model.predict(input);
output.print();
Особенности инференса в браузере:
dispose() или
использовать tf.tidy() для автоматического управления
памятью:tf.tidy(() => {
const result = model.predict(tf.tensor2d([[7, 8]]));
result.print();
});
Promise, если требуется выполнение на GPU или с
использованием WebAssembly:const result = await model.predictAsync(tf.tensor2d([[7, 8]]));
TensorFlow.js поддерживает загрузку предобученных моделей для задач классификации изображений, распознавания текста, генерации и т.д. Это позволяет избежать обучения с нуля и сразу выполнять инференс в браузере.
Пример загрузки MobileNet для классификации изображений:
const mobilenet = await tf.loadGraphModel(
'https://tfhub.dev/google/tfjs-model/imagenet/mobilenet_v2_140_224/classification/3/default/1',
{fromTFHub: true}
);
const imageTensor = tf.browser.fromPixels(document.getElementById('image')).resizeBilinear([224, 224]).expandDims();
const predictions = mobilenet.predict(imageTensor);
predictions.print();
Преимущества такого подхода:
Для больших наборов данных рекомендуется использовать объект
tf.data.Dataset. Он позволяет создавать потоковые данные и
пакетную обработку, что актуально при обучении на сервере.
const data = tf.data.array([{x: [1,2], y: 3}, {x: [4,5], y: 9}]);
const dataset = data.map(item => ({
xs: tf.tensor(item.x).expandDims(),
ys: tf.tensor([item.y])
})).batch(2);
Использование dataset в model.fitDataset
обеспечивает эффективное управление памятью и загрузкой данных.
tensorflowjs_converter.TensorFlow.js предоставляет методы для выбора бэкенда:
await tf.setBackend('webgl'); // GPU
await tf.setBackend('cpu'); // CPU
Также можно проверять доступность бэкендов:
console.log(tf.getBackend());
console.log(tf.engine().backendNames());
Это позволяет адаптировать инференс под возможности устройства пользователя. Для мобильных устройств рекомендуется использовать CPU или WebAssembly для экономии энергии и снижения нагрева.