1

tensorflow에서 텍스트 분류를위한 LSTM RNN 모델을 만들고 savedModel을 성공적으로 내 보냈습니다. 내가 savedModel CLI를 사용하여 모델을 테스트하고 모든 것이 잘 작동하는 것 같습니다. 그러나 요청을하고 결과를 얻을 수있는 클라이언트를 만들려고합니다. 나는 이것을 참고로 tensorflow serving inception example (더 구체적으로 inception_client.py)을 따라왔다. 이것은 초기 모델과 잘 작동하지만 내 모델에 대한 요청을 변경하는 방법을 잘 모르겠습니다. 요청을 정확히 어떻게 변경해야합니까? 모델 저장tensorflow 검색에 대한 클라이언트 요청에 "초기화되지 않은 값 fully_connected/biases 사용 시도 중"오류가 발생합니다.

내 서명은 :

# Build the signature_def_map. 
classification_signature = signature_def_utils.build_signature_def(
    inputs={signature_constants.CLASSIFY_INPUTS: classification_inputs}, 
    outputs={ 
     signature_constants.CLASSIFY_OUTPUT_CLASSES: 
      classification_outputs_classes, 
    }, 
    method_name=signature_constants.CLASSIFY_METHOD_NAME) 

legacy_init_op = tf.group(
    tf.tables_initializer(), name='legacy_init_op') 
#add the sigs to the servable 
builder.add_meta_graph_and_variables(
    sess, [tag_constants.SERVING], 
    signature_def_map={ 
     signature_constants.DEFAULT_SERVING_SIGNATURE_DEF_KEY: 
      classification_signature 
    }, 
    assets_collection=tf.get_collection(tf.GraphKeys.ASSET_FILEPATHS), 
    legacy_init_op=tf.group(assign_filename_op)) 



print ("added meta graph and variables") 

builder.save() 
print("model saved") 

모델 번호가 목록의 목록 인 입력으로 취하고 inputs_ ([1,3,4,5,2]). 나는 savedModel CLI를 사용하고 어떻게

inputs_ = tf.placeholder(tf.int32, [None, None], name="input_ints") 

(오른쪽 결과를 반환) 다음 savedModel에 대한

$ saved_model_cli run --dir ./python2_SavedModelFinalInputInts --tag_set serve --signature_def 'serving_default' --input_exprs inputs='[[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2634, 758, 938, 579, 1868, 1894, 24, 651, 572, 32, 1847, 232]]' 

추가 정보 :

난에 요청을 만들려고하고 어떻게
$ saved_model_cli show --dir ./python2_prediction_SavedModelFinalInputInts --all 

MetaGraphDef with tag-set: 'serve' contains the following SignatureDefs: 

signature_def['serving_default']: 
The given SavedModel SignatureDef contains the following input(s): 
inputs['inputs'] tensor_info: 
    dtype: DT_INT32 
    shape: (-1, -1) 
    name: inputs/input_ints:0 
The given SavedModel SignatureDef contains the following output(s): 
outputs['outputs'] tensor_info: 
    dtype: DT_FLOAT 
    shape: (1, 1) 
    name: predictions/fully_connected/Sigmoid:0 
Method name is: tensorflow/serving/predict 

고객 코드 :

 request1 = predict_pb2.PredictRequest() 
     request1.model_spec.name = 'mnist' 
     request1.model_spec.signature_name = signature_constants.DEFAULT_SERVING_SIGNATURE_DEF_KEY 
    request1.inputs[signature_constants.PREDICT_INPUTS].CopyFrom(tf.contrib.util.make_tensor_proto(input_nums, shape=[1,100],dtype=tf.int32)) 

    response = stub.Predict(request1,1.0) 

    result_dict = { 'Analyst Rating': str(response.message) } 
    return jsonify(result_dict) 

나는 다음과 같은 오류가 점점 오전 :

[2017-11-29 19:03:29,318] ERROR in app: Exception on /analyst_rating [POST] 
Traceback (most recent call last): 
    File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1612, in full_dispatch_request 
    rv = self.dispatch_request() 
    File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1598, in dispatch_request 
    return self.view_functions[rule.endpoint](**req.view_args) 
    File "/usr/local/lib/python2.7/dist-packages/flask_restful/__init__.py", line 480, in wrapper 
    resp = resource(*args, **kwargs) 
    File "/usr/local/lib/python2.7/dist-packages/flask/views.py", line 84, in view 
    return self.dispatch_request(*args, **kwargs) 
    File "/usr/local/lib/python2.7/dist-packages/flask_restful/__init__.py", line 595, in dispatch_request 
    resp = meth(*args, **kwargs) 
    File "restApi.py", line 91, in post 
    response = stub.Predict(request,1) 
    File "/usr/local/lib/python2.7/dist-packages/grpc/beta/_client_adaptations.py", line 309, in __call__ 
    self._request_serializer, self._response_deserializer) 
    File "/usr/local/lib/python2.7/dist-packages/grpc/beta/_client_adaptations.py", line 195, in _blocking_unary_unary 
    raise _abortion_error(rpc_error_call) 
AbortionError: AbortionError(code=StatusCode.FAILED_PRECONDITION, details="Attempting to use uninitialized value fully_connected/biases 
    [[Node: fully_connected/biases/read = Identity[T=DT_FLOAT, _class=["loc:@fully_connected/biases"], _output_shapes=[[1]], _device="/job:localhost/replica:0/task:0/cpu:0"](fully_connected/biases)]]") 
127.0.0.1 - - [29/Nov/2017 19:03:29] "POST /analyst_rating HTTP/1.1" 500 - 
{"message": "Internal Server Error"} 

업데이트 :

예측 서명 분류 서명에서 모델의 서명을 변경 작업을 보였다. 또한 처음에 Assets 조직에 사용했던 assign_filename_op에서 정의한대로 legacy_init_op을 legacy_init_op으로 변경했습니다.

답변

0

모델 서명을 분류에서 예측 서명으로 변경하면 결과가 반환 된 것으로 보입니다.

prediction_signature = (tf.saved_model.signature_def_utils.build_signature_def(
    inputs={signature_constants.PREDICT_INPUTS: prediction_inputs}, 
    outputs={signature_constants.PREDICT_OUTPUTS: prediction_outputs}, 
    method_name=tf.saved_model.signature_constants.PREDICT_METHOD_NAME)) 

legacy_init_op = tf.group(tf.tables_initializer(), name='legacy_init_op') 
#add the sigs to the servable 
builder.add_meta_graph_and_variables(
    sess, [tag_constants.SERVING], 
    signature_def_map={ 
     signature_constants.DEFAULT_SERVING_SIGNATURE_DEF_KEY: 
      prediction_signature 
    }, 
    # assets_collection=tf.get_collection(tf.GraphKeys.ASSET_FILEPATHS), 
    legacy_init_op=legacy_init_op) 

분류 서명이있는 모델에 대한 클라이언트 요청의 요구 사항 또는 작동하지 않는 이유에 대해 완전히 확신 할 수 없습니다.

(설명이있는 사람은 정답으로 선택합니다.)