Преобразование модели

TensorFlow.js поставляется с различными моделями предварительно обучен, которые готовы к использованию в браузере - их можно найти в наших моделях репо . Однако вы могли найти или создать модель TensorFlow в другом месте, которую хотели бы использовать в своем веб-приложении. TensorFlow.js обеспечивает модель преобразователя для этой цели. Конвертер TensorFlow.js состоит из двух компонентов:

  1. Утилита командной строки, которая преобразует модели Keras и TensorFlow для использования в TensorFlow.js.
  2. API для загрузки и выполнения модели в браузере с помощью TensorFlow.js.

Конвертируйте вашу модель

Конвертер TensorFlow.js работает с несколькими различными форматами моделей:

SavedModel: Это стандартный формат , в котором сохраняется модель TensorFlow. Формат SavedModel документирован здесь .

Keras модели: модели Keras обычно сохраняются в виде файла HDF5. Более подробную информацию о сохранении модели Keras можно найти здесь .

Модуль TensorFlow Hub: Это модель , которые были упакованы для распределения на TensorFlow Hub, платформа для обмена и открытия моделей. Библиотека модели можно найти здесь .

В зависимости от того, какой тип модели вы пытаетесь преобразовать, вам нужно будет передать конвертеру разные аргументы. Например, предположим, что вы сохранили Keras модель с именем model.h5 к вашему tmp/ директории. Чтобы преобразовать вашу модель с помощью конвертера TensorFlow.js, вы можете выполнить следующую команду:

$ tensorflowjs_converter --input_format=keras /tmp/model.h5 /tmp/tfjs_model

Это будет конвертировать модель в /tmp/model.h5 и вывода model.json файла вместе с бинарными весовыми файлов в вашем tmp/tfjs_model/ каталог.

Более подробно о параметрах командной строки , соответствующие различным форматам модели можно найти на TensorFlow.js преобразовательных README .

В процессе преобразования мы просматриваем граф модели и проверяем, поддерживается ли каждая операция TensorFlow.js. Если это так, мы записываем график в формате, который может использовать браузер. Мы пытаемся оптимизировать модель для обслуживания в сети, сегментируя веса в файлы размером 4 МБ - таким образом они могут быть кэшированы браузерами. Мы также попытаемся упростить модель граф сам , используя с открытым исходным кодом Grappler проекта. Упрощения графов включают сворачивание смежных операций, удаление общих подграфов и т. Д. Эти изменения не влияют на вывод модели. Для дальнейшей оптимизации пользователи могут передать аргумент, который инструктирует преобразователь квантовать модель до определенного байтового размера. Квантование - это метод уменьшения размера модели путем представления весов меньшим количеством битов. Пользователи должны следить за тем, чтобы их модель сохраняла приемлемую степень точности после квантования.

Если мы сталкиваемся с неподдерживаемой операцией во время преобразования, процесс завершается ошибкой, и мы распечатываем имя операции для пользователя. Не стесняйтесь представить вопрос на нашем GitHub , чтобы сообщить нам об этом - мы постараемся реализовать новые операции в ответ на потребности пользователей.

Лучшие практики

Хотя мы прилагаем все усилия, чтобы оптимизировать вашу модель во время преобразования, часто лучший способ убедиться, что ваша модель работает хорошо, - это создавать ее с учетом сред с ограниченными ресурсами. Это означает отказ от чрезмерно сложной архитектуры и минимизацию количества параметров (весов), когда это возможно.

Запустите свою модель

После успешного преобразования вашей модели вы получите набор файлов веса и файл топологии модели. TensorFlow.js предоставляет API-интерфейсы загрузки модели, которые можно использовать для получения этих ресурсов модели и выполнения вывода в браузере.

Вот как выглядит API для преобразованного модуля TensorFlow SavedModel или TensorFlow Hub:

const model = await tf.loadGraphModel(‘path/to/model.json’);

А вот как выглядит переделанная модель Keras:

const model = await tf.loadLayersModel(‘path/to/model.json’);

tf.loadGraphModel API возвращает tf.FrozenModel , что означает , что параметры фиксированы , и вы не сможете точно настроить модель с новыми данными. tf.loadLayersModel API возвращает tf.Model, которые могут быть обучены. Для получения информации о том , как обучить tf.Model, относятся к направляющей поезда модели .

После преобразования рекомендуется несколько раз выполнить логический вывод и измерить скорость вашей модели. У нас есть бенчмаркинг страницы автономной , которые могут быть использованы для этой цели: https://tensorflow.github.io/tfjs/e2e/benchmarks/local-benchmark/index.html Вы можете заметить , что мы отказываемся измерение от начального запуска прогрева - это потому, что (в общем) первый вывод вашей модели будет в несколько раз медленнее, чем последующие выводы из-за накладных расходов на создание текстур и компиляцию шейдеров.