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