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

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/ .

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

В процессе преобразования мы просматриваем граф модели и проверяем, что каждая операция поддерживается 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);

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

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