Tensorflow java api - 第一个预测时间与第二个或更多

时间:2017-06-16 22:52:52

标签: java 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 ms
  2. 第二预测性能:0.4776 ms

1 个答案:

答案 0 :(得分:1)

简答

是的,这是正常行为而不是引起警报。

更长的答案

Tensorflow使用图表(因为我确定您已经意识到),它定义了操作的顺序和流程。它没有定义在定义它们时如何以最佳方式执行它们。这一切都是在第一次运行时整理出来的。所以是的,一些延迟加载或更精确的懒惰计算。

您很可能会使用TensorFlow处理数千或数百万个条目,因此前1个比正常时间长10毫秒的事实应该不是问题。如果您使用TensorFlow作为服务,那么您可能希望长时间保持会话打开,类似于您为多个查询保持SQL连接打开而不是通过tcp / ip重新连接或每个请求。