我正在尝试使用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
参数?
谢谢!
答案 0 :(得分:1)
我不确定你能不能做到。 fmin_l_bfgd_b
不是由纯python代码提供的,而是由扩展(FORTRAN代码的包装)提供的。在Win32 / 64平台上,可以在\scipy\optimize\_lbfgsb.pyd
找到它。只有您可以以不同方式编译扩展或修改FORTRAN代码,才能实现所需。如果您检查FORTRAN代码,那么它到处都有double precision
,基本上是float64
。我不确定只需将它们全部更改为single precision
即可完成工作。
在其他优化方法中,FORTRAN也提供了cobyla
。鲍威尔的方法也是如此。