Рекомендовать формат модели TensorFlow

TensorFlow

Введение

В 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.