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

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 . Вы можете заметить, что мы отбрасываем измерения из первоначального прогрева — это потому, что (в общем) первый вывод вашей модели будет в несколько раз медленнее, чем последующие выводы из-за накладных расходов на создание текстур и компиляцию шейдеров.