2017-10-15 10 views
1

J'essaie d'établir une communication avec une session Tensorflow Serving. Le code suivant fonctionne, mais il est un peu lent. Y a-t-il un moyen de l'améliorer? Je suppose que le problème réside dans la quatrième ligne - la sortie donne une liste d'éléments float_val, et j'ai besoin de les convertir en un tableau float et de les remodeler.Tensorflow Serving Response

Y at-il un moyen d'obtenir la sortie du serveur dans la bonne forme? J'ai défini la signature de sortie comme ci-dessous (ce que je pense est correct).

prediction_channel, request_form = setup_channel(args.server)  
request_form.inputs['images'].CopyFrom(
       tf.contrib.util.make_tensor_proto(img_transformed, shape=list(img_transformed.shape))) 
output = prediction_channel.Predict.future(request_form, 5.0) 
output = np.array(output.result().outputs['scores'].float_val).reshape(1, 16, 64, 64) 

La première ligne ouvre le canal vers le serveur en utilisant la fonction

def setup_channel(hostport): 
    host, port = hostport.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 = 'hg' 
    request.model_spec.signature_name = 'predict_images' 
    return stub, request 

La signature de sortie est la suivante:

tensor_info_x = tf.saved_model.utils.build_tensor_info(model.input_tensor) 
tensor_info_y = tf.saved_model.utils.build_tensor_info(model.predict) 

prediction_signature = (
    tf.saved_model.signature_def_utils.build_signature_def(
     inputs={'images': tensor_info_x}, 
     outputs={'scores': tensor_info_y}, 
     method_name=tf.saved_model.signature_constants.PREDICT_METHOD_NAME))** 

et le modèle de prédire a une forme de (1, 16 64, 64).

Répondre

0

Je ne sais pas comment vous gérez votre Predict.future(request_form, 5.0), mais la même chose devrait demander le traitement de réponse de synchronisation; tf offre une fonction d'utilité make_ndarray:

res = stub.Predict(request, timeout).outputs[tensor_name] 
arr = tf.make_ndarray(res) 

arr sera un tableau de np des DiMS corrects.

tensor_name est le nom défini dans votre signature par exemple

tf.saved_model.signature_def_utils.build_signature_def(
    inputs={'images': inp_tensor_info}, 
    outputs={'scores': out_tensor_info}, 
    method_name=tf.saved_model.signature_constants.PREDICT_METHOD_NAME 
) 

nécessiterait

res = stub.Predict(request, timeout).outputs['scores'] 
arr = tf.make_ndarray(res)