Для работы с TensorFlow.js и конвертации моделей из Python необходимо
установить пакет tensorflowjs. В среде Node.js это делается
через npm:
npm install @tensorflow/tfjs
npm install -g tensorflowjs
Пакет @tensorflow/tfjs обеспечивает возможность
создавать, обучать и запускать модели непосредственно в браузере или в
Node.js. Утилита tensorflowjs_converter позволяет
преобразовывать модели из форматов TensorFlow SavedModel, Keras HDF5 и
других в формат, совместимый с TensorFlow.js.
После установки доступ к утилите осуществляется через командную строку:
tensorflowjs_converter --help
Вывод команды показывает все доступные параметры конвертации, включая указание формата исходной модели, пути к директории с моделью и назначения.
TensorFlow.js поддерживает три ключевых формата исходных моделей:
Keras HDF5 (.h5) Модели, созданные
с помощью Keras, могут быть напрямую преобразованы в формат
TensorFlow.js. Пример конвертации:
tensorflowjs_converter \
--input_format=keras \
model.h5 \
tfjs_model
В результате в директории tfjs_model создаются файлы
model.json и бинарные файлы с весами
(*.bin).
TensorFlow SavedModel Формат, используемый в TensorFlow для сохранения графа и весов. Поддерживает как CPU, так и GPU-версии. Конвертация:
tensorflowjs_converter \
--input_format=tf_saved_model \
--output_format=tfjs_graph_model \
saved_model_dir \
tfjs_model
Здесь tfjs_graph_model — это формат, оптимизированный
для выполнения графа в браузере.
TF Hub Modules Некоторые модели можно загружать напрямую из TensorFlow Hub, после чего конвертировать с помощью команды, аналогичной SavedModel.
Ключевые параметры конвертера:
--input_format — формат исходной модели
(keras, tf_saved_model,
tf_hub).--output_format — формат выходной модели
(tfjs_layers_model, tfjs_graph_model).--quantization_bytes — позволяет уменьшить размер весов
(1, 2, 4 байта), что полезно для веб-приложений.--skip_op_check — пропуск проверки поддерживаемых
операций, если модель содержит нестандартные слои.Для веб-приложений важна производительность и размер загружаемой модели. Пример конвертации с уменьшением точности весов до 2 байт:
tensorflowjs_converter \
--input_format=keras \
--output_format=tfjs_layers_model \
--quantization_bytes=2 \
model.h5 \
tfjs_model
После конвертации структура папки выглядит следующим образом:
tfjs_model/
├── group1-shard1of1.bin
├── model.json
Файл model.json содержит описание слоев и пути к
бинарным весам. Браузер загружает только JSON, после чего подгружает
весовые файлы по мере необходимости.
Для сложных моделей, использующих TensorFlow Operations, применяется графовый формат:
tensorflowjs_converter \
--input_format=tf_saved_model \
--output_format=tfjs_graph_model \
saved_model/ \
tfjs_graph_model/
Если модель содержит кастомные слои или операции, может потребоваться
параметр --skip_op_check. В случае ошибок несовместимости
слоев рекомендуется проверить наличие поддерживаемых операций на
официальной странице документации TensorFlow.js.
После конвертации модели подключаются через стандартные API TensorFlow.js:
В браузере:
import * as tf from '@tensorflow/tfjs';
async function loadModel() {
const model = await tf.loadLayersModel('tfjs_model/model.json');
return model;
}
В Node.js:
const tf = require('@tensorflow/tfjs-node');
async function loadModel() {
const model = await tf.loadLayersModel('file://tfjs_model/model.json');
return model;
}
Использование loadLayersModel применяется для моделей,
конвертированных из Keras, тогда как loadGraphModel
применяется для графовых моделей SavedModel.
--quantization_bytes значительно сокращает загрузку для
веб-клиента.tf.io.browserFiles для локальных файлов в браузере.После конвертации важно проверить корректность работы модели:
const input = tf.zeros([1, 224, 224, 3]);
const output = model.predict(input);
output.print();
Если выходные данные соответствуют ожиданиям, конвертация прошла успешно. Для графовых моделей можно использовать TensorFlow.js визуализаторы графов или интеграцию с TensorBoard через Node.js.
Эта последовательность установки, конвертации и интеграции обеспечивает надежную работу моделей TensorFlow в веб-среде, позволяя использовать современные архитектуры нейронных сетей без необходимости установки Python на клиенте.