2017-08-26 11 views
3

私はSavedModelをエクスポートしましたが、今すぐ戻して予測します。それは、次の機能とラベルで訓練を受けた:TensorFlow:SavedModelから予測する方法は?

F1 : FLOAT32 
F2 : FLOAT32 
F3 : FLOAT32 
L1 : FLOAT32 

だから私は、単一のFLOAT32予測を得る20.9, 1.8, 0.9値を供給するようにしたいと言います。これをどのように達成するのですか?モデルを正常に読み込むことができましたが、予測呼び出しを行うためにアクセスする方法がわかりません。

with tf.Session(graph=tf.Graph()) as sess: 
    tf.saved_model.loader.load(
     sess, 
     [tf.saved_model.tag_constants.SERVING], 
     "/job/export/Servo/1503723455" 
    ) 

    # How can I predict from here? 
    # I want to do something like prediction = model.predict([20.9, 1.8, 0.9]) 

この質問は、hereという質問と重複していません。この質問は、モデルクラス(tf.estimatorに限定されているだけではありません)のSavedModelと、入力および出力ノード名を指定する構文の推論を実行する最小限の例に焦点を当てています。

+2

の可能性のある重複した[tf.estimatorを使用して保存Tensorflowの鉄道模型をインポートし、入力データに予測する方法](https://stackoverflow.com/questions/46098863/how-to-import -an-saved-tensorflow-model-train-using-tf-estimator-and-predict-on) – rhaertel80

+0

これが重複していない理由について私の最新の編集を見てください。 – jshapy8

答えて

0

グラフがロードされると、現在のコンテキストで使用でき、入力データをフィードに渡して予測を取得できます。各ユースケースはかなり異なりますが、あなたのコードに加えてこのようになります。ここでは

with tf.Session(graph=tf.Graph()) as sess: 
    tf.saved_model.loader.load(
     sess, 
     [tf.saved_model.tag_constants.SERVING], 
     "/job/export/Servo/1503723455" 
    ) 

    prediction = sess.run(
     'prefix/predictions/Identity:0', 
     feed_dict={ 
      'Placeholder:0': [20.9], 
      'Placeholder_1:0': [1.8], 
      'Placeholder_2:0': [0.9] 
     } 
    ) 

    print(prediction) 

は、あなたの予測入力がどうなるかの名前を知っている必要があります。 serving_fnに名前を付けなかった場合は、デフォルトでPlaceholder_nになります。nがn番目の機能です。

sess.runの最初の文字列引数は、予測対象の名前です。これは、ユースケースによって異なります。

1

Pythonで予測すると仮定すると、おそらくがSavedModelを読み込んで予測を取得する最も簡単な方法です。あなたはそのようなあなたのモデルを保存したとします

# Build the graph 
f1 = tf.placeholder(shape=[], dtype=tf.float32) 
f2 = tf.placeholder(shape=[], dtype=tf.float32) 
f3 = tf.placeholder(shape=[], dtype=tf.float32) 
l1 = tf.placeholder(shape=[], dtype=tf.float32) 
output = build_graph(f1, f2, f3, l1) 

# Save the model 
inputs = {'F1': f1, 'F2': f2, 'F3': f3, 'L1': l1} 
outputs = {'output': output_tensor} 
tf.contrib.simple_save(sess, export_dir, inputs, outputs) 

(入力は任意の形状とすることができ、さらには、グラフ内のプレースホルダもルートノードである必要はありません)。

その後、SavedModelを使用するPythonプログラムでは、我々はそうのような予測を得ることができます。

from tensorflow.contrib import predictor 

predict_fn = predictor.from_saved_model(export_dir) 
predictions = predict_fn(
    {"F1": 1.0, "F2": 2.0, "F3": 3.0, "L1": 4.0}) 
print(predictions) 

This answer

は事実にもかかわらずのJava、C++、およびPythonの(の予測を取得する方法を示している 質問はEstimatorsに焦点を当てていますが、回答は実際に SavedModelの作成方法とは関係なく適用されます)。訓練された缶詰のモデルを保存し、tensorflow食分せずにそれを提供するの実例を必要とする人のため

2

、私はあなたが入力を準備tf.tensorflow.contrib.predictor.from_saved_model(exported_model_path)

  • からの予測を作成することができ、ここで https://github.com/tettusud/tensorflow-examples/tree/master/estimators

    1. を文書化している

      tf.train.Example( 
          features= tf.train.Features(
           feature={ 
            'x': tf.train.Feature(
             float_list=tf.train.FloatList(value=[6.4, 3.2, 4.5, 1.5]) 
            )  
           } 
          )  
      ) 
      

    ここでxは、エクスポート時にinput_receiver_functionで指定された入力の名前です。例えばのための :

    ​​
  • 関連する問題