TensorFlow.js предоставляет возможности для запуска и обучения
моделей машинного обучения непосредственно в браузере или в среде
Node.js. Одним из ключевых преимуществ является возможность
использования уже обученных моделей, созданных с помощью Keras. Формат
HDF5 (.h5) является стандартом для хранения весов и
архитектуры моделей Keras. Для работы с такими моделями в TensorFlow.js
требуется их конвертация в формат JSON с бинарными файлами весов
(.bin).
Для конвертации моделей Keras в формат TensorFlow.js используется
пакет @tensorflow/tfjs-converter. Установка через npm:
npm install -g @tensorflow/tfjs-converter
Также потребуется наличие Node.js версии не ниже 14 и установленного Python для работы с Keras.
Конвертация выполняется через команду
tensorflowjs_converter. Стандартный синтаксис:
tensorflowjs_converter \
--input_format keras \
путь/к/модели/model.h5 \
путь/к/выходной/директории
Параметры, которые важно учитывать:
--input_format keras — указывает, что исходная модель
сохранена в формате Keras HDF5.--output_format tfjs_layers_model — по умолчанию
используется формат слоевой модели TensorFlow.js. Позволяет загрузить
модель через tf.loadLayersModel.--quantization_bytes — опционально, позволяет уменьшить
размер весов модели за счёт квантования (1, 2 или 4 байта на вес).Пример с квантованием для уменьшения размера весов:
tensorflowjs_converter \
--input_format keras \
--quantization_bytes 2 \
model.h5 \
tfjs_model
После выполнения команды в указанной директории появятся:
model.json — структура модели и информация о
весах;group1-shard\*of\*bin — бинарные файлы весов
модели.После конвертации модель можно загрузить в браузере или Node.js.
Пример для браузера:
import * as tf from '@tensorflow/tfjs';
const model = await tf.loadLayersModel('/tfjs_model/model.json');
// Использование модели для предсказаний
const input = tf.tensor2d([[0.5, 0.8]]);
const prediction = model.predict(input);
prediction.print();
Пример для Node.js:
import * as tf from '@tensorflow/tfjs-node';
const model = await tf.loadLayersModel('file://tfjs_model/model.json');
const input = tf.tensor2d([[0.5, 0.8]]);
const prediction = model.predict(input);
prediction.print();
Обратите внимание на префикс file:// в Node.js, который
указывает на локальный путь к модели.
tf.serialization.registerClass. Пример:class MyCustomLayer extends tf.layers.Layer {
constructor(config) {
super(config);
}
call(input) {
return input.mul(2);
}
static get className() {
return 'MyCustomLayer';
}
}
tf.serialization.registerClass(MyCustomLayer);
const model = await tf.loadLayersModel('/tfjs_model/model.json');
Сложные функции активации Все функции активации, поддерживаемые Keras, совместимы с TensorFlow.js. Пользовательские функции необходимо реализовать через кастомный слой или кастомную функцию активации.
Сохранение весов отдельно Если требуется, можно сохранять веса отдельно от архитектуры модели, что облегчает обновление весов без повторной конвертации:
tensorflowjs_converter \
--input_format keras \
--weights_only \
model.h5 \
tfjs_weights
После конвертации рекомендуется выполнить проверку предсказаний модели на контрольных данных, чтобы убедиться, что значения не изменились из-за квантования или особенностей конвертации.
const input = tf.tensor2d([[0.1, 0.2]]);
const output = model.predict(input);
output.array().then(arr => console.log(arr));
Сравнение с результатами из Keras позволит выявить возможные расхождения.
--quantization_bytes) снижает размер
без значительной потери точности.Модель, конвертированная из Keras, интегрируется в фронтенд следующим образом:
model.json и .bin файлы на
сервере или CDN.tf.loadLayersModel.tf.browser.fromPixels или числовых массивов через
tf.tensor.Это позволяет создавать интерактивные веб-приложения с нейронными сетями без необходимости выполнять вычисления на сервере.
Хотите, могу подробно расписать тонкости работы с пользовательскими слоями и активациями, которые чаще всего вызывают ошибки при конвертации из Keras HDF5 в TensorFlow.js. Это будет отдельный подглава с реальными примерами кода.