我已经使用 scipy.optimize.fmin_l_bfgs_b() 来最小化函数有一段时间了,但最近我遇到了一种我以前没有注意到的行为。在优化一些新函数时,随着执行更多迭代,内存使用量不断增加。例如,到第 1500 次迭代时,内存使用量增加了 100 倍,在某些情况下,我必须在内存耗尽之前停止优化。作为引用,我之前运行过 scipy.optimize.fmin_l_bfgs_b()
来优化其他函数,但从未看到内存使用量增加。
根据我对这个函数工作原理的理解,它应该在每次迭代时执行类似类型的计算,所以我不明白为什么内存使用量会增加。
这是预期的行为,还是可能存在某种内存泄漏(在 fmin_l_bfgs_b
中或在我提供的函数中)?
最佳答案
如果在最小化函数中没有释放内存,则每次调用该函数都会增加程序的内存分配。大多数 Python 对象都会正确释放。
我遇到了从 C 扩展模块返回的数组的问题,其中该模块负责分配内存,但没有正确返回它。重写模块以正确释放内存解决了该问题,解决方案已在此处讨论:
Memory leak in Python extension when array is created with PyArray_SimpleNewFromData() and returned
关于python - 为什么 scipy.optimize.fmin_l_bfgs_b() 内存使用量随着迭代而增加?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35637270/