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