Невозможно получить входные значения из запроса клиента обслуживания Tensorflow - PullRequest
1 голос
/ 26 мая 2019

Я пытаюсь развернуть мою модель тензорного потока в тензорном потоке, используя модель, сохраненную в тензорном потоке.Входными данными для моей модели tf является строковое значение, и я определил свою подпись, как показано ниже

        prediction_signature = (
            tf.saved_model.signature_def_utils.build_signature_def(
                inputs={'input_path': tensor_info_input},
                outputs={'output_prediction': tensor_info_output},
                method_name=tf.saved_model.signature_constants.PREDICT_METHOD_NAME))

        builder.add_meta_graph_and_variables(
            sess, [tf.saved_model.tag_constants.SERVING],
            signature_def_map={
                'predict_images':
                    prediction_signature,
            })

Моя цель - прочитать изображение по пути, указанному в определении подписи.Как я могу получить input_path из входного определения и преобразовать тензор в фактическое строковое значение, чтобы прочитать путь

Ответы [ 2 ]

1 голос
/ 29 мая 2019

Вы можете поместить указанный ниже код в файл Python, скажем, Client.py. А для вывода вы можете запустить нижеприведенную команду в Терминале

python Client.py --image abc/0.png --model mnist --signature_name predict

Это займет путь к изображению "abc / 0.png", преобразует его в числовые значения и выполнит вывод.

Код для Client.py указан ниже. Ниже приведен код для изображений MNIST. Вы можете изменить ваши изображения соответственно:

from __future__ import print_function

import argparse
import time
import numpy as np
from scipy.misc import imread

import grpc
from tensorflow.contrib.util import make_tensor_proto

from tensorflow_serving.apis import predict_pb2
from tensorflow_serving.apis import prediction_service_pb2_grpc


def run(host, port, image, model, signature_name):

    channel = grpc.insecure_channel('{host}:{port}'.format(host=host, port=port))
    stub = prediction_service_pb2_grpc.PredictionServiceStub(channel)

    # Read an image
    data = imread(image)
    data = data.astype(np.float32)
    print(data)

    start = time.time()

    # Call classification model to make prediction on the image
    request = predict_pb2.PredictRequest()
    request.model_spec.name = model
    request.model_spec.signature_name = signature_name
    request.inputs['image'].CopyFrom(make_tensor_proto(data, shape=[1, 28, 28, 1]))

    result = stub.Predict(request, 10.0)

    end = time.time()
    time_diff = end - start

    # Reference:
    # How to access nested values
    # https://stackoverflow.com/questions/44785847/how-to-retrieve-float-val-from-a-predictresponse-object
    print(result)
    print('time elapased: {}'.format(time_diff))


if __name__ == '__main__':
    parser = argparse.ArgumentParser()
    parser.add_argument('--host', help='Tensorflow server host name', default='localhost', type=str)
    parser.add_argument('--port', help='Tensorflow server port number', default=8500, type=int)
    parser.add_argument('--image', help='input image', type=str)
    parser.add_argument('--model', help='model name', type=str)
    parser.add_argument('--signature_name', help='Signature name of saved TF model',
                        default='serving_default', type=str)

    args = parser.parse_args()
    run(args.host, args.port, args.image, args.model, args.signature_name)

Для получения дополнительной информации, вы можете обратиться к этой прекрасной статье о Tensorflow Serving, https://medium.com/@yuu.ishikawa/serving-pre-modeled-and-custom-tensorflow-estimator-with-tensorflow-serving-12833b4be421

0 голосов
/ 27 мая 2019

Я думаю, вам нужно добавить "операцию чтения" в файл модели.

Как это:

def inference(image_path_string):
    # read image from a image path string
    image_file = tf.read_file(image_path_string)
    image_raw = tf.cond(tf.image.is_jpeg(image_file),
                        lambda: tf.image.decode_jpeg(image_file, channels= 3 if rgb, else 1),
                        lambda: tf.image.decode_bmp(image_file))
    # image preprocessing code
    ...
    ...
    # your prediction model code
    ...
    ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...