Python Keras tf后端预测批量大小为1时速度较慢

Python Keras tf后端预测批量大小为1时速度较慢,python,performance,keras,Python,Performance,Keras,我将蒙特卡罗树搜索与卷积神经网络相结合作为推出策略。我已经确定Keras模型。预测函数非常慢。经过实验,我发现令人惊讶的是,模型参数大小和预测样本大小对速度没有显著影响。供参考: 批次尺寸为3的3个样品的0.00135549 s 批次尺寸为1的3个样品的0.00303991 s 批次尺寸=1的1个样品0.00115528秒 批次尺寸为10的10个样品为0.00136132 s 正如你所见,我可以预测10个样本,速度与1个样本大致相同。如果我将参数大小减少100倍,那么变化也非常小,尽管很明显

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

  • 批次尺寸为3的3个样品的0.00135549 s
  • 批次尺寸为1的3个样品的0.00303991 s
  • 批次尺寸=1的1个样品0.00115528秒
  • 批次尺寸为10的10个样品为0.00136132 s
正如你所见,我可以预测10个样本,速度与1个样本大致相同。如果我将参数大小减少100倍,那么变化也非常小,尽管很明显,但无论如何,我还是不希望参数大小改变那么多。此外,预测函数在第一次运行时非常慢(~0.2s),尽管我认为这不是问题所在,因为同一个模型预测了多次


我想知道是否有一些解决办法,因为很明显,这10个样本可以很快进行评估,我只想在不同的时间预测样本,而不是一次预测所有样本,因为我需要在进行新预测之前更新树搜索。也许我应该改为使用tensorflow?

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

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


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

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

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


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

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