我一直在使用scipy.optimize.fmin_l_bfgs_b()
来最小化函数一段时间,但最近我遇到了一个我以前没有注意到的行为。在优化一些新功能的同时,随着更多迭代的执行,内存使用量不断增加。例如,到第1500次迭代时,内存使用量增加了x100,在某些情况下,我必须在耗尽内存之前停止优化。作为参考,我已经运行以前运行scipy.optimize.fmin_l_bfgs_b()
来优化其他功能,并且从未看到内存使用量的增加。
从我理解这个函数的工作方式来看,它应该在每次迭代时执行类似的计算类型,所以我不明白为什么内存使用会增加。
是否需要这种行为,或者这可能是某种内存泄漏(在fmin_l_bfgs_b
或我提供的函数中)?
答案 0 :(得分:1)
如果在最小化函数中未释放内存,则每次调用该函数都会增加程序的内存分配。大多数Python对象都会正确释放。
我遇到了一个从C扩展模块返回的数组的问题,模块负责分配内存但没有正确返回它。重写模块以正确释放内存解决了这个问题,这里已经讨论了解决方案:
Memory leak in Python extension when array is created with PyArray_SimpleNewFromData() and returned