【问题标题】:Keras tf backend predict speed slow for batch size of 1Keras tf 后端预测批量大小为 1 的速度很慢
【发布时间】:2021-09-04 17:11:15
【问题描述】:

我将蒙特卡洛树搜索与卷积神经网络相结合作为推出策略。我已经确定 Keras model.predict 函数非常慢。经过实验,我发现模型参数大小和预测样本大小对速度没有显着影响。供参考:

  • 0.00135549 秒,3 个样本,batch_size = 3
  • 0.00303991 秒,3 个样本,batch_size = 1
  • 0.00115528 秒,1 个样本,batch_size = 1
  • 0.00136132 秒,10 个样本,batch_size = 10

如您所见,我可以以与 1 个样本大致相同的速度预测 10 个样本。如果我将参数大小减小 100 倍,这种变化也非常小,尽管很明显,但我宁愿不要将参数大小改变那么多。此外,predict 函数在第一次运行时非常慢(~0.2s),尽管我认为这不是问题所在,因为同一个模型会多次预测。

我想知道是否有一些解决方法,因为显然可以非常快速地评估 10 个样本,我想做的只是预测不同时间的样本,而不是一次预测所有样本,因为我需要在之前更新树搜索做出新的预测。也许我应该改用 tensorflow?

【问题讨论】:

    标签: python performance keras


    【解决方案1】:

    批量大小控制预测时的并行性,因此预计增加批量大小将具有更好的性能,因为您可以使用更多内核并更有效地使用 GPU。

    您无法真正解决问题,没有什么真正可以解决的问题,使用一个批量大小是性能最差的情况。也许您应该研究一个预测速度更快的小型网络,或者如果您的实验在 GPU 中完成,则在 CPU 上进行预测,以最大限度地减少传输造成的开销。

    不要忘记model.predict 对网络进行了完整的前向传递,因此它的速度完全取决于网络架构。

    【讨论】:

    • 如果我多次调用 predict ,keras 会在每次调用时重新加载 gpu 的所有权重,还是在调用之间保留 gpu 中的权重?我的模型有一百万个参数,但是输入和输出向量只有几个字节,而且很慢很慢。
    • @grabbag 听起来你应该问自己的问题。
    【解决方案2】:

    让我加快速度的一种方法是从 model.predict(x) 切换到,

    model.predict_on_batch(x)
    

    确保您的 x 形状的第一个维度为 1。

    【讨论】:

      猜你喜欢
      • 2018-03-24
      • 2016-10-21
      • 2016-09-22
      • 2020-02-11
      • 1970-01-01
      • 2017-09-27
      • 1970-01-01
      • 2019-03-03
      • 2017-06-03
      相关资源
      最近更新 更多