2017-11-22 8 views
2

API tf.estimator를 기반으로 Tensorflow (r1.4)로 CNN을 구축하려고합니다. 통조림 모델입니다. 아이디어는 파이썬에서 평가자를 사용하여 네트워크를 훈련 및 평가하고 교육 후에 생성 된 pb 파일을로드하여 예측 자없이 C++의 예측을 사용하는 것입니다.Export Tensorflow Estimator

내 첫 번째 질문은 가능한가?

예인 경우 교육 파트가 작동하고 예측 파트도 작동하지만 (예상 자없이 생성 된 pb 파일을 사용) 예측기에서 pb 파일을로드 할 때 작동하지 않습니다.

feature_spec = {'input_image': parsing_ops.FixedLenFeature(dtype=dtypes.float32, shape=[1, 48 * 48])} 
export_input_fn = tf.estimator.export.build_parsing_serving_input_receiver_fn(feature_spec) 

input_fn = tf.estimator.inputs.numpy_input_fn(self.eval_features, 
               self.eval_label, 
               shuffle=False, 
               num_epochs=1) 
eval_result = self.model.evaluate(input_fn=input_fn, name='eval') 
exporter = tf.estimator.FinalExporter('save_model', export_input_fn) 
exporter.export(estimator=self.model, export_path=MODEL_DIR, 
       checkpoint_path=self.model.latest_checkpoint(), 
       eval_result=eval_result, 
       is_the_final_export=True) 

그것은 둘 tf.estimator.Estimator.export_savedmodel()

둘 중 하나는 추정에 명시 적 자습서를 알고있는 경우와 통조림하지와 함께 작동하지 않습니다 내 모델을 내보낼 "Data loss: Can't parse saved_model.pb as binary proto" 내 pyhon 코드 :

나는이 오류가 발생했습니다 모델 및 수출 방법, 관심이 있으신 분

답변

2

github의 this issue을 보시면 동일한 문제가있는 것 같습니다. 분명히 (최소한 estimator.export_savedmodel을 사용할 때) 분명히 ReadBinaryProto가 아닌 그래프는 그래프 정의 파일로 저장되지 않기 때문에 LoadSavedModel으로로드해야합니다. 그것을 사용하는 방법에 대한

당신은 찾을 수 here 좀 더 지침 :

const string export_dir = ... 
SavedModelBundle bundle; 
... 
LoadSavedModel(session_options, run_options, export_dir, {kSavedModelTagTrain}, 
       &bundle); 

나는 C++ 나중에 사용하기 위해 SavedModelBundle 문서를 찾을 수 없습니다,하지만 the same class in Java에 가능성이 가까이 이 경우 기본적으로 세션과 사용할 그래프가 포함됩니다.