python - Keras tf 后端预测批量大小为 1 的速度很慢
问题描述
我将蒙特卡洛树搜索与卷积神经网络相结合作为推出策略。我已经确定 Keras model.predict 函数非常慢。经过实验,我发现模型参数大小和预测样本大小对速度没有显着影响。以供参考:
- 0.00135549 s 对于 3 个样本,batch_size = 3
- 0.00303991 s 对于 3 个样本,batch_size = 1
- 0.00115528 s 对于 1 个样本,batch_size = 1
- batch_size = 10 的 10 个样本为 0.00136132 秒
如您所见,我可以以与 1 个样本大致相同的速度预测 10 个样本。如果我将参数大小减小 100 倍,这种变化也非常小,但很明显,但无论如何我都不想改变参数大小。此外,predict 函数在第一次运行时非常慢(~0.2 秒),但我认为这不是问题所在,因为同一个模型会进行多次预测。
我想知道是否有一些解决方法,因为显然可以非常快速地评估 10 个样本,我想做的只是预测不同时间的样本,而不是一次预测所有样本,因为我需要在创建新的树搜索之前更新预言。也许我应该使用 tensorflow 来代替?
解决方案
批量大小控制预测时的并行性,因此预计增加批量大小将具有更好的性能,因为您可以使用更多内核并更有效地使用 GPU。
您无法真正解决问题,没有什么可以解决的,使用一个批量大小是性能最差的情况。也许您应该研究一个预测速度更快的较小网络,或者如果您的实验是在 GPU 中完成的,则在 CPU 上进行预测,以最大限度地减少传输造成的开销。
不要忘记它model.predict
会完成网络的完整前向传递,因此它的速度完全取决于网络架构。
推荐阅读
- windows-runtime - 哪个版本支持 Windows.Graphics.Capture?
- r - 对因子 x 调用 var(x) 已失效
- sql - SQL 语句用于计算“Column_a”从前一天更改的所有行
- spring - WSDL 生成的 Jaxb 仅将命名空间前缀添加到根元素
- java - 从 Android 应用向小米手环 5 发送通知
- c++ - 绑定 QUdpSocket 的合法地址是什么?
- android - 可展开的列表视图 - 在展开另一个项目时折叠一个项目 (Android)
- ruby-on-rails - Stripe 允许直接向印度的银行账户分期付款给供应商吗?
- javascript - console.log 和算术运算在 (addEventListener) javascript 中不起作用
- java - 用逗号在Java中打印中序遍历