python - 为什么 scipy.optimize.fmin_l_bfgs_b() 内存使用量随着迭代而增加?

标签 python scipy

我已经使用 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/

相关文章:

python - 标准化 Scipy 稀疏矩阵的有效方法

python - 如何在Python中对3D数组进行聚类?

python - ChromeDriver版本不匹配错误: session not created: This version of ChromeDriver only supports Chrome version 91

python - 使用 matplotlib.pyplot 或 numpy 切断右手点

python - Keras 中的 conv2d 和 Conv2D 有什么区别?

python - 如何正确地将 scipy.sparse CSR 矩阵传递给 cython 函数?

python - 使用 Python 在句子中反转单词?

python - 如何在 Python 的 matplotlib 中设置 'backend'?

python - 使用 python/numpy 进行任意图像切片

python - 有效扩张线性回归