2017-06-16 10 views
0

モデルをjava apiで読み込み、予測を実行すると、最初のものが他のものよりもかなり長くかかることがあります。物事のようないくつかの怠惰な評価があります、私は最初の予測までロードされていないモデルの重みを意味する?これの背後にある理由は何ですか?Tensorflow java api - 1番目の予測時間と2番目以上の数値

 try (Session s = load.session()) { 
      Tensor result = null; 
      startTime = System.nanoTime(); 
      result = s.runner().feed("input", data).fetch("prediction").run().get(0); 
      endTime = System.nanoTime(); 
      System.out.println(String.format("First prediction performance: %.4f ms", ((double)endTime - startTime)/1000000)); 

      startTime = System.nanoTime(); 
      result = s.runner().feed("input", data).fetch("prediction").run().get(0); 
      endTime = System.nanoTime(); 
      System.out.println(String.format("2nd prediction performance: %.4f ms", ((double)endTime - startTime)/1000000)); 

      System.out.println(result.toString()); 

     } 
  1. まず予測性能:10.6066ミリ秒
  2. 第二予測性能:0.4776ミリ秒
+0

gpuまたはcpuを使用していますか? – Wontonimo

+0

私はCPUを使用しています。実際には私は大丈夫です、私は2番目とより多くの予測の計算時間が好きです。ちょうど私が正しくそれを測定していることを確認したい。 – kecso

答えて

1

短い答え

はい、これは正常な動作ではなく、アラームの原因です。順序や業務の流れを定義する

(私はあなたが実現するために来ていると確信しているとして)Tensorflowは、グラフを使用しています

長い回答。定義している間にそれらを最適に実行する方法は定義されていません。それはすべて最初の実行時にソートされます。だから、いくつかの遅延読み込みやより正確な遅延計算。

ほとんどの場合、TensorFlowを使用して数千または数百万のエントリを処理するため、最初の1が通常よりも10ms長くかかることは問題ではありません。 TensorFlowをサービスとして使用している場合は、複数のクエリに対してSQL接続を開いたままにし、tcp/ipまたは各要求で再接続しない方法と同様に、長い間セッションを開いたままにしておくことをお勧めします。

+0

ありがとうございます。計画はサービスとしてそれを使用しているので、セッションを開いたままにしておく必要があります。 – kecso

関連する問題