2017-06-16 23 views
0

我遇到了如果我用java api加載模型並做了預測,第一個預測時間比其他任何其他時間都要長得多。有一些懶東西的評價,我的意思是模型的權重沒有加載到第一個預測?這背後的原因是什麼?Tensorflow java api - 第一預測時間與第二或更多

 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

你使用的CPU或CPU? – Wontonimo

+0

我正在使用cpu。其實我很確定,我喜歡第二個和更多預測的計算時間。只是想確定我正確地測量它。 – kecso

回答

1

簡答

是的,這是正常的行爲和報警的不是一個原因。

再回應

Tensorflow使用的圖形(我敢肯定你已經認識到)定義的順序和操作流程。它沒有定義在定義它們時如何最優地執行它們。這一切都是在第一次運行時完成的。所以是的,一些懶加載或更精確的懶計算。

很可能你會使用TensorFlow來處理數千或數百萬條目,所以第一個1比正常長10毫秒的事實應該不成問題。如果您使用TensorFlow作爲服務,那麼您可能需要長時間保持會話打開狀態,這與您如何爲多個查詢保持SQL連接打開方式類似,而不是通過tcp/ip或每個請求重新連接。

+0

感謝您的解釋。該計劃將其用作服務,因此我必須小心保持會話的開啓。 – kecso

相關問題