我遇到的情况是,如果我使用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());
}
答案 0 :(得分:1)
是的,这是正常行为而不是引起警报。
Tensorflow使用图表(因为我确定您已经意识到),它定义了操作的顺序和流程。它没有定义在定义它们时如何以最佳方式执行它们。这一切都是在第一次运行时整理出来的。所以是的,一些延迟加载或更精确的懒惰计算。
您很可能会使用TensorFlow处理数千或数百万个条目,因此前1个比正常时间长10毫秒的事实应该不是问题。如果您使用TensorFlow作为服务,那么您可能希望长时间保持会话打开,类似于您为多个查询保持SQL连接打开而不是通过tcp / ip重新连接或每个请求。