如何强制scipy.optimize.fmin_l_bfgs_b使用'dtype = float32'

时间:2013-09-27 01:53:00

标签: python optimization scipy gpu multidimensional-array

我正在尝试使用Python中的GPU计算来优化函数,因此我更喜欢将所有数据存储为dtype=float32的ndarrays。

当我使用scipy.optimize.fmin_l_bfgs_b时,我注意到优化器总是将float64(在我的64位机器上)参数传递给我的目标和渐变函数,即使我传递float32 ndarray作为初始搜索点x0。当我使用cg优化器scipy.optimize.fmin_cg时,这是不同的,当我将float32数组作为x0传入时,优化器将在所有后续的目标/梯度函数调用中使用float32

所以我的问题是:我是否可以强制执行scipy.optimize.fmin_l_bfgs_b来优化float32中的scipy.optimize.fmin_cg参数?

谢谢!

1 个答案:

答案 0 :(得分:1)

我不确定你能不能做到。 fmin_l_bfgd_b不是由纯python代码提供的,而是由扩展(FORTRAN代码的包装)提供的。在Win32 / 64平台上,可以在\scipy\optimize\_lbfgsb.pyd找到它。只有您可以以不同方式编译扩展或修改FORTRAN代码,才能实现所需。如果您检查FORTRAN代码,那么它到处都有double precision,基本上是float64。我不确定只需将它们全部更改为single precision即可完成工作。

在其他优化方法中,FORTRAN也提供了cobyla。鲍威尔的方法也是如此。