2017-11-22 8 views
2

私はAPI tf.estimatorに基づいてTensorflow(r1.4)でCNNを構築しようとしています。それは缶詰めのモデルです。このアイデアは、pythonで推定子を使ってネットワークを訓練して評価し、訓練後に生成されたpbファイルをロードすることによって、推定子なしでC++で予測を使用することです。Export Tensorflow Estimator

私の最初の質問は可能ですか?

はいの場合、トレーニングパートは機能し、予測パートも機能します(見積もりなしでpbファイルが生成されます)が、見積もりツールからpbファイルを読み込むと機能しません。

私はこのエラーを得た:"Data loss: Can't parse saved_model.pb as binary proto" マイpyhonコード私のモデルをエクスポートするには:

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

では動作しません。モデルとそれをエクスポートする方法、私は興味があります

答えて

2

githubのthis issueを見てください、あなたは同じ問題があるように見えます。明らかに(少なくともestimator.export_savedmodelを使用している場合)、グラフはReadBinaryProtoではなくLoadSavedModelでロードする必要があります。これは、graphdefファイルとして保存されていないためです。それを使用する方法について

あなたは見つけることができますhereもう少し命令が:、

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

私はC++、後でそれを使用するためSavedModelBundleドキュメントを見つけるように見えることはできませんが、それはthe same class in Javaの可能性が近いで​​すその場合は基本的にセッションと使用するグラフが含まれています。