Tensorflow java api第一次预测时间与第二次或更多
我的经验是,如果我用JavaAPI加载一个模型,并进行预测,那么第一个模型所需的时间要比以后任何一个模型所需的时间都要长。有一些懒惰的评估之类的东西,我的意思是直到第一次预测时才加载模型权重?这背后的原因是什么
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());
}
- 首次预测性能:10.6066毫秒
- 第二预测性能:0.4776毫秒
# 1 楼答案
简短回答
是的,这是正常行为,不是引起恐慌的原因
更长的答案
Tensorflow使用一个图形(我相信您已经意识到),它定义了操作的顺序和流程。它没有定义如何在定义它们的同时以最佳方式执行它们。第一次运行时,所有这些都已解决。是的,一些延迟加载或者更准确地说是延迟计算
您很可能会使用TensorFlow来处理数千或数百万个条目,因此前1个条目比正常情况下需要10毫秒的时间应该不是问题。如果您使用TensorFlow作为服务,那么您可能希望保持会话长时间处于打开状态,类似于保持SQL连接对多个查询保持打开状态,而不是通过tcp/ip或每个请求重新连接