TensorFlow.js предоставляет инструментарий для переноса моделей,
обученных в Python с использованием TensorFlow или Keras, в формат,
совместимый с JavaScript. Одним из ключевых инструментов является
tensorflowjs_converter, который
обеспечивает конвертацию моделей в формат TensorFlow.js, позволяя
использовать их в браузере или на сервере Node.js.
Для работы с tensorflowjs_converter требуется
установленный Python и пакет TensorFlow.js. Установка
производится через pip:
pip install tensorflowjs
После установки в системе становится доступна команда
tensorflowjs_converter, позволяющая
преобразовывать модели.
tensorflowjs_converter умеет работать с различными
типами моделей:
Keras HDF5 (.h5) Полный файл
модели, включающий структуру сети и веса. Пример:
model.h5.
SavedModel TensorFlow Формат, создаваемый
функцией model.save('path') в TensorFlow 2.x. Содержит граф
вычислений и веса модели.
TF Hub Modules Поддерживается конвертация некоторых модулей из TensorFlow Hub в формат TensorFlow.js.
Ключевой момент: при конвертации важно учитывать, что некоторые операции и слои Keras могут не поддерживаться в TensorFlow.js. Необходимо проверять совместимость перед конвертацией.
Базовый синтаксис команды:
tensorflowjs_converter \
--input_format=keras \
path/to/model.h5 \
path/to/tfjs_model
--input_format=keras указывает исходный формат
модели.path/to/model.h5 — путь к файлу модели Keras.path/to/tfjs_model — путь, куда будут сохранены
конвертированные файлы.При успешной конвертации создается директория с:
model.json — описание архитектуры модели и
метаданных.group1-shard\*of\*.bin — бинарные файлы весов
модели.Если модель сохранена в формате SavedModel, команда будет выглядеть так:
tensorflowjs_converter \
--input_format=tf_saved_model \
--output_format=tfjs_graph_model \
path/to/saved_model \
path/to/tfjs_model
--output_format=tfjs_graph_model создаёт модель в виде
графа, пригодного для выполнения в браузере или Node.js.--signature_name=serving_default для указания конкретной
сигнатуры входа-выхода.--quantization_bytes — уменьшение
размера модели через квантование весов. Примеры:
1 — веса в 1 байт (8 бит), максимальная
компрессия.2 — веса в 2 байта (16 бит).4 — без сжатия (32 бита, стандартный формат).Пример использования:
tensorflowjs_converter \
--input_format=keras \
--quantization_bytes=2 \
model.h5 \
tfjs_model
--skip_op_check — пропуск проверки
поддерживаемых операций, полезно при наличии экспериментальных
слоёв.
--control_flow_v2 — включение поддержки
динамического графа TensorFlow 2.x с контролем потока.
Не найден Keras файл Убедиться, что указанный
путь корректен и файл .h5 существует.
Несовместимые слои Некоторые кастомные или
редкие слои Keras не поддерживаются. В этом случае требуется либо их
замена на стандартные, либо создание кастомного слоя в TensorFlow.js
через tf.layers.Layer.
Ошибка версий Конвертер работает корректно при совпадении версий TensorFlow в Python и TensorFlow.js. Желательно использовать последние стабильные версии.
После конвертации:
import * as tf from '@tensorflow/tfjs';
async function loadModel() {
const model = await tf.loadLayersModel('path/to/tfjs_model/model.json');
return model;
}
async function predict(inputData) {
const model = await loadModel();
const inputTensor = tf.tensor(inputData);
const output = model.predict(inputTensor);
return output.array();
}
Важные моменты:
tf.loadLayersModel используется для моделей,
конвертированных из Keras.tfjs_graph_model) используется
tf.loadGraphModel.async/await для работы с моделью.--split_weights_by_layer для больших
моделей, чтобы облегчить загрузку и кэширование в браузере.Эти методы позволяют добиться эффективного использования моделей Keras в веб-приложениях, обеспечивая баланс между производительностью и точностью.