TensorFlow.js предоставляет возможность загружать и использовать модели, созданные с помощью TensorFlow в Python. Для этого необходимо выполнить конвертацию модели из формата SavedModel или Keras H5 в формат, совместимый с TensorFlow.js. Этот процесс позволяет интегрировать модели машинного обучения прямо в веб-приложения на JavaScript.
Для конвертации используется пакет tensorflowjs. Установка осуществляется через npm:
npm install -g @tensorflow/tfjs-converter
Проверка версии инструмента:
tensorflowjs_converter --version
Важно использовать актуальную версию, так как конвертер постоянно обновляется для поддержки новых функций TensorFlow.
TensorFlow.js поддерживает два основных формата:
Layers Format Используется для моделей Keras (HDF5 или SavedModel). В результате конвертации создаются файлы:
model.json — описание архитектуры сети и
метаданных.*.bin — веса модели в бинарном формате.Graph Model Format Используется для низкоуровневых графовых моделей TensorFlow. После конвертации создаются:
model.json — JSON-структура графа.*.bin — веса модели.Конвертация из SavedModel чаще всего относится к формату Graph Model, особенно если модель была обучена с использованием функционального API TensorFlow или низкоуровневого API.
SavedModel — это основной формат сохранения моделей TensorFlow, включающий:
saved_model.pb или
saved_model.pbtxt)variables/variables.data-00000-of-00001 и
variables/variables.index)Команда для конвертации SavedModel в TensorFlow.js:
tensorflowjs_converter \
--input_format=tf_saved_model \
--output_format=tfjs_graph_model \
--signature_name=serving_default \
--saved_model_tags=serve \
/путь/к/saved_model \
/путь/к/tfjs_model
Пояснение параметров:
--input_format=tf_saved_model — указывает на исходный
формат.--output_format=tfjs_graph_model — формат для
TensorFlow.js.--signature_name — имя подписи, которая используется
для вызова модели (по умолчанию serving_default).--saved_model_tags — теги модели (обычно
serve для продакшн-моделей).После выполнения команды в указанной директории появятся файлы
model.json и один или несколько бинарных файлов с
весами.
Если модель имеет несколько входов и выходов, необходимо учитывать сигнатуры функций:
tensorflowjs_converter \
--input_format=tf_saved_model \
--output_format=tfjs_graph_model \
--signature_name=my_signature \
--saved_model_tags=serve \
/путь/к/saved_model \
/путь/к/tfjs_model
Список доступных сигнатур можно получить через Python:
import tensorflow as tf
model = tf.saved_model.load("/путь/к/saved_model")
print(list(model.signatures.keys()))
Это позволяет точно выбрать, какая функция будет использоваться для инференса в веб-приложении.
После конвертации модель можно загружать в JavaScript через API TensorFlow.js:
import * as tf from '@tensorflow/tfjs';
async function loadModel() {
const model = await tf.loadGraphModel('/tfjs_model/model.json');
return model;
}
async function predict(model, inputTensor) {
const output = model.execute(inputTensor);
return output;
}
Особенности работы с графовыми моделями:
tf.tensor, tf.image.resizeBilinear и
т. д.Для уменьшения размера модели и ускорения загрузки в веб-приложениях можно использовать quantization при конвертации:
tensorflowjs_converter \
--input_format=tf_saved_model \
--output_format=tfjs_graph_model \
--quantize_float16 \
/путь/к/saved_model \
/путь/к/tfjs_model
--quantize_float16 — уменьшает точность весов до 16
бит, что сокращает размер почти в два раза.--quantize_uint8 для 8-битной
квантизации.Эта оптимизация особенно полезна для мобильных браузеров и ограниченных по памяти устройств.
После конвертации важно убедиться, что модель работает корректно:
Конвертация из SavedModel в TensorFlow.js позволяет использовать мощные модели Python прямо в веб-браузерах и Node.js, обеспечивая высокую совместимость и эффективность инференса без необходимости в серверной поддержке Python.