Как отправить tf.example в запрос на прогнозирование gRPC TensorFlow Serving - PullRequest
0 голосов
/ 21 декабря 2018

У меня есть данные в форме tf.example, и я пытаюсь сделать запросы в форме прогноза (используя gRPC) к сохраненной модели.Я не могу определить вызов метода, чтобы осуществить это.

Я начинаю с хорошо известной регрессионной модели DNN по автомобильным ценам (https://github.com/tensorflow/models/blob/master/samples/cookbook/regression/dnn_regression.py), которую я уже экспортировал и смонтировал через док-контейнер TF Serving.

import grpc
import numpy as np
import tensorflow as tf
from tensorflow_serving.apis import predict_pb2, prediction_service_pb2_grpc

stub = prediction_service_pb2_grpc.PredictionServiceStub(grpc.insecure_channel("localhost:8500"))

tf_ex = tf.train.Example(
    features=tf.train.Features(
        feature={
            'curb-weight': tf.train.Feature(float_list=tf.train.FloatList(value=[5.1])),
            'highway-mpg': tf.train.Feature(float_list=tf.train.FloatList(value=[3.3])),
            'body-style': tf.train.Feature(bytes_list=tf.train.BytesList(value=[b"wagon"])),
            'make': tf.train.Feature(bytes_list=tf.train.BytesList(value=[b"Honda"])),
        }
    )
)

request = predict_pb2.PredictRequest()
request.model_spec.name = "regressor_test"

# Tried this:
request.inputs['inputs'].CopyFrom(tf_ex)

# Also tried this:
request.inputs['inputs'].CopyFrom(tf.contrib.util.make_tensor_proto(tf_ex))

# This doesn't work either:
request.input.example_list.examples.extend(tf_ex)

# If it did work, I would like to inference on it like this:
result = self.stub.Predict(request, 10.0)

Спасибо за любой совет

1 Ответ

0 голосов
/ 28 декабря 2018

Я полагаю, что ваша сохраненная модель имеет serving_input_receiver_fn, принимая string в качестве входных данных и анализируя tf.Example. Использование SavedModel с оценщиками

def serving_example_input_receiver_fn():
    serialized_tf_example = tf.placeholder(dtype=tf.string)
    receiver_tensors = {'inputs': serialized_tf_example}   
    features = tf.parse_example(serialized_tf_example, YOUR_EXAMPLE_SCHEMA)
    return tf.estimator.export.ServingInputReceiver(features, receiver_tensors)

, поэтому serving_input_receiver_fn принимает строку, поэтому вам необходимо SerializeToString ваш tf.Example().Кроме того, serving_input_receiver_fn работает как input_fn для обучения, пакетный сброс данных в модель.

Код может измениться на:

request = predict_pb2.PredictRequest()
request.model_spec.name = "regressor_test"
request.model_spec.signature_name = 'your method signature, check use saved_model_cli'
request.inputs['inputs'].CopyFrom(tf.make_tensor_proto([tf_ex.SerializeToString()], dtype=types_pb2.DT_STRING))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...