2017-10-15 4 views
1

Tensorflow Servingセッションへの通信を確立しようとしています。 次のコードは機能しますが、少し遅いです。それを改善する方法はありますか?私は問題が4行目にあると考えています。出力はfloat_val要素のリストとして与えられています。浮動小数点型配列に変換し、それらを変形する必要があります。Tensorflow Serving Response

サーバーの出力を正しい形にする方法はありますか? 以下のように出力署名を定義しました(これは正しいと思います)。

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) 

最初の行は、機能

を使用してサーバーへのチャネルを開く
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 

出力シグネチャは:

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))** 

とモデルが(1、16の形状を有する予測、64,64)。

答えて

0

私はあなたのPredict.future(request_form, 5.0)をどのように扱っているのかよくわかりませんが、同期応答処理にも同じことが適用されます。 TFは、ユーティリティ機能make_ndarrayを提供しています:

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

arrは正しい暗くなるのNP配列になります。

ここで、tensor_nameは、署名に定義されている名前です。

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 
) 

必要となる

res = stub.Predict(request, timeout).outputs['scores'] 
arr = tf.make_ndarray(res) 
関連する問題