Tensorflow экспортирует и повторно использует объект Estimator в Python
Речь идет о Tensorflow и его более высоком API Estimator, а также об экспорте и повторном использовании моделей.
Существует несколько средств для экспорта моделей тензорного потока: tf.train.Saver, запись и импорт графиков напрямую с соответствующими им весами.
Мои интересы лежат в объекте tf.estimator.Estimator и в том, как мы можем их использовать. Мой пример использования довольно прост: я подхожу к простой модели скажем в tenorflow и хотел бы использовать ее предсказания в более сложной.
Существует export_savemodel
метод для обслуживания модели, однако мне нужно было бы установить связь в моей модели через порты, и я не уверен, является ли это оптимальным для обучения.
Мой вопрос заключается в следующем:
Есть ли (простой) способ использовать и импортировать вывод
export_savemodel
в питоне? Я догадался, что вы могли бы технически использовать код C++ и создать обертку вокруг них?Есть ли эффективный способ составить
tf.estimator.Estimator
и повторно использовать его в Python? Компилятор XLA кажется интересным, но я не смог выяснить, смогу ли я использовать результат обратно в Python.В целом, какова лучшая практика повторного использования ранее обученных моделей в Tensorflow?
Большое спасибо за ваше чтение!
РЕДАКТИРОВАТЬ (мой собственный ответ): принятый ответ предлагает использовать saved_model
API. Тем не менее, я думаю, что стоит понять концепцию графа и замороженного графа. Эта основная ссылка иллюстрирует основные шаги, которые, вероятно, повторяются в saved_model
апи. По сути, вы должны:
- перестроить график с переопределенными входными операциями;
- заморозить эту версию;
- предоставить новый вклад в
input_map
аргумент при звонкеtf.import_graph_def
перезагрузить модель спины.
1 ответ
- Да, см. Этот документ https://github.com/tensorflow/tensorflow/blob/master/tensorflow/python/saved_model/README.md. В частности, раздел APIs.Loader.Python.
- Что вы подразумеваете под "составить оценку"? Все данные, используемые оценщиком, сохраняются в SavedModel. Сброс - это просто логика высокого уровня. Фактические операции, такие как умножение матриц, обеспечиваются библиотекой C++ и выполняются на любом оборудовании, которое у вас есть - CPU, GPU или TPU. XLA - это довольно низкоуровневый компилятор, далёкий от Estimator API. Для получения дополнительной информации об этом ищите разговор об этом "XLA: TensorFlow, Compiled! (TensorFlow Dev Summit 2017)"
- Ссылка выше предоставляет очень высокоуровневый API. Для нижнего уровня см. https://www.tensorflow.org/programmers_guide/meta_graph. На еще более низком уровне находится GraphDef (см. Ссылки на странице meta_graph).