Введение
В TensorFlow существует множество форматов моделей, и разные форматы могут использоваться для разных сценариев.Если модели, соответствующие спецификациям, могут быть легко развернуты в онлайн-сервисах или на мобильных устройствах, вот краткий список.
- Контрольная точка: используется для уменьшения веса модели, в основном используется для резервного копирования параметров и горячего запуска обучения модели во время обучения модели.
- GraphDef: График, используемый для сохранения модели, не содержит веса модели, и после добавления контрольной точки вся информация о модели поступает в онлайн.
- ExportModel: файл модели, экспортированный с помощью интерфейса экспортера, включая диаграмму модели и веса, можно использовать непосредственно для онлайн-использования, но он официально помечен как устаревший, и рекомендуется использовать SavedModel.
- SavedModel: файл модели, экспортированный с помощью интерфейса save_model, включая график модели и разрешения, можно использовать непосредственно для использования в Интернете.Этот формат модели рекомендуется для моделей TensorFlow и Keras.
- FrozenGraph: используйте freeze_graph.py для интеграции и оптимизации контрольной точки и GraphDef, которые можно напрямую развернуть на мобильных устройствах, таких как Android и iOS.
- TFLite: модель оптимизирована на основе flatbuf и может быть напрямую развернута на мобильных устройствах, таких как Android и iOS Интерфейс несколько отличается от интерфейса FrozenGraph.
Формат модели
В настоящее время рекомендуется экспортировать как модели TensorFlow, так и модели Keras в формат SavedModel, чтобы общий сервис TensorFlow Serving можно было использовать напрямую, а модель можно было экспортировать онлайн без изменения кода. При экспорте разных моделей вам нужно указать только подпись ввода и вывода.Ключ строки может быть назван произвольно и будет использоваться только по запросу клиента.Вы можете обратиться к следующему примеру кода.
Обратите внимание, что в настоящее время модель, использующая tf.py_func(), не может быть напрямую подключена к сети после экспорта.Рекомендуется, чтобы все структуры модели были реализованы с помощью op.
Экспорт модели TensorFlow
import os
import tensorflow as tf
from tensorflow.python.saved_model import builder as saved_model_builder
from tensorflow.python.saved_model import (
signature_constants, signature_def_utils, tag_constants, utils)
from tensorflow.python.util import compat
model_path = "model"
model_version = 1
model_signature = signature_def_utils.build_signature_def(
inputs={
"keys": utils.build_tensor_info(keys_placeholder),
"features": utils.build_tensor_info(inference_features)
},
outputs={
"keys": utils.build_tensor_info(keys_identity),
"prediction": utils.build_tensor_info(inference_op),
"softmax": utils.build_tensor_info(inference_softmax),
},
method_name=signature_constants.PREDICT_METHOD_NAME)
export_path = os.path.join(compat.as_bytes(model_path), compat.as_bytes(str(model_version)))
legacy_init_op = tf.group(tf.tables_initializer(), name='legacy_init_op')
builder = saved_model_builder.SavedModelBuilder(export_path)
builder.add_meta_graph_and_variables(
sess, [tag_constants.SERVING],
clear_devices=True,
signature_def_map={
signature_constants.DEFAULT_SERVING_SIGNATURE_DEF_KEY:
model_signature,
},
legacy_init_op=legacy_init_op)
builder.save()
Экспорт модели Keras
import os
import tensorflow as tf
from tensorflow.python.util import compat
def export_savedmodel(model):
model_path = "model"
model_version = 1
model_signature = tf.saved_model.signature_def_utils.predict_signature_def(
inputs={'input': model.input}, outputs={'output': model.output})
export_path = os.path.join(compat.as_bytes(model_path), compat.as_bytes(str(model_version)))
builder = tf.saved_model.builder.SavedModelBuilder(export_path)
builder.add_meta_graph_and_variables(
sess=K.get_session(),
tags=[tf.saved_model.tag_constants.SERVING],
clear_devices=True,
signature_def_map={
tf.saved_model.signature_constants.DEFAULT_SERVING_SIGNATURE_DEF_KEY:
model_signature
})
builder.save()
Структура модели SavedModel
После экспорта модели SavedModel с помощью TensorFlow API вы можете проверить структуру каталогов модели следующим образом, а затем напрямую использовать инструмент с открытым исходным кодом для загрузки службы.
Модель выходит в эфир
Развертывание онлайн-сервисов
Используйте интерфейс HTTP для справкиtobegit3hub/simple_tensorflow_serving.
Используйте интерфейс gRPC для справкиtensorflow/serving.
Развертывание автономных устройств
Развернуть на Android для справкиmedium.com/@to be_beautiful/ali….
Развертывание на iOS для справкиzhuanlan.zhihu.com/p/33715219.