Сохранить модель для обслуживания Tensorflow

Я новичок в тензорном потоке. Я выполнил инструкции по обслуживанию тензорного потока для обслуживания моделей в контейнере докеров. Я могу использовать модель mnist и начальную модель, следуя инструкциям из https://www.tensorflow.org/serving/.

Обслуживающие модели сохранены в следующей структуре:

.
|-- inception-export
|   `-- 1
|       |-- saved_model.pb
|       `-- variables
|           |-- variables.data-00000-of-00001
|           `-- variables.index
`-- mnist_model
    `-- 1
        |-- saved_model.pb
        `-- variables
            |-- variables.data-00000-of-00001
            `-- variables.index

Вопросов:

  1. Как обслуживать переобученных моделей?

Я следую инструкциям из https://codelabs.developers.google.com/codelabs/tensorflow-for-poets/#0 для переобучения моделей.

python retrain.py \
  --bottleneck_dir=bottlenecks \
  --how_many_training_steps=500 \
  --model_dir=inception \
  --summaries_dir=training_summaries/basic \
  --output_graph=retrained_graph.pb \
  --output_labels=retrained_labels.txt \
  --image_dir=flower_photos

Вышеупомянутая команда создает retrained_graph.pb вместе с retrained_label.txt и каталогом узких мест.

Как преобразовать вывод в формат, чтобы повторно обученную модель можно было обслуживать через обслуживающий сервер Tensorflow?

  1. Как обслуживать предварительно обученных моделей?

    Я просмотрел демонстрацию обнаружения объектов https://github.com/tensorflow/models/blob/master/object_detection/object_detection_tutorial.ipynb, в котором объясняется, как использовать модель «SSD с Mobilenet» (https://github.com/tensorflow/models/blob/master/object_detection/g3doc/detection_model_zoo.md) для обнаружения объектов.

    Ssd_mobilenet_v1_coco_11_06_2017.tar.gz содержит

    - a graph proto (graph.pbtxt)
    - a checkpoint (model.ckpt.data-00000-of-00001, model.ckpt.index, model.ckpt.meta)
    - a frozen graph proto with weights baked into the graph as constants (frozen_inference_graph.pb) 
    

    Как преобразовать указанные выше файлы в формат, чтобы предварительно обученную модель можно было обслуживать через обслуживающий сервер Tensorflow?

  2. Как создать клиента для пользовательской модели, обслуживаемой через обслуживающий сервер Tensorflow?

Я выполнил инструкции на странице http://fdahms.com/2017/03/05/tensorflow-serving-jvm-client/ для создания собственной модели. В блоге объясняется, как создать пользовательский, обслуживающий сервер и клиент тензорного потока для доступа к модели. Процесс создания клиента НЕ очень понятен. Я хочу создать клиента на Python и Java.

Есть ли лучший пример или руководство, чтобы помочь понять процесс создания клиентского кода для пользовательских моделей, обслуживаемых через обслуживающий сервер Tensorflow.


person ashish nagar    schedule 23.08.2017    source источник
comment
Возможно использование: stackoverflow.com/questions/46098863/   -  person rhaertel80    schedule 13.09.2017


Ответы (1)


Tensorflow Serving теперь поддерживает формат SavedModel. Если у вас есть переобученная модель, на самом деле вам не нужно использовать обнаружение объектов. Что вы можете сделать, так это использовать заставку, чтобы восстановить сеанс из модели с переобучением предыдущего формата, а затем снова экспортировать ее с помощью SavedModelBuilder, с помощью которого сохраненная модель эта услуга tf может быть сгенерирована. Вот еще один мой ответ на аналогичный вопрос.

Что касается клиента, вы можете сослаться на приведенный ниже код, который также является примером в tf serve / example :

from grpc.beta import implementations
import tensorflow as tf

from tensorflow_serving.apis import predict_pb2
from tensorflow_serving.apis import prediction_service_pb2

tf.app.flags.DEFINE_string('server', 'localhost:9000',
                           'PredictionService host:port')
FLAGS = tf.app.flags.FLAGS


def main(_):
  host, port = FLAGS.server.split(':')
  channel = implementations.insecure_channel(host, int(port))
  stub = prediction_service_pb2.beta_create_PredictionService_stub(channel)

  request = predict_pb2.PredictRequest()
  request.model_spec.name = 'model_name'
  request.model_spec.signature_name = 'signature_name'
  request.inputs['input_key'].CopyFrom(
        tf.contrib.util.make_tensor_proto(your_data, shape=data_size))
  result = stub.Predict(request, 10.0)  # 10 secs timeout
  print(result.output)
person aforwardz    schedule 06.09.2017