1

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

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

所以我的问题是:我可以强制scipy.optimize.fmin_l_bfgs_b优化float32像 in 这样的参数scipy.optimize.fmin_cg吗?

谢谢!

4

1 回答 1

1

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

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

于 2013-09-27T04:11:33.460 回答