L-BFGS是否有tf.keras.optimizer实现



有人有L-BFGS算法的Tensorflow 2 tf.keras子类吗?如果一个人想使用L-BFGS,目前有两个(官方(选项:

  1. TF概率
  2. SciPy优化

这两个选项使用起来相当麻烦,尤其是在使用自定义模型时。因此,我计划实现tf.keras.optimizer的自定义子类,以使用L-BFGS。但在我开始之前,我很好奇,是否有人已经完成了这项任务?

我已经实现了keras和SciPyoptimize之间的接口。https://github.com/pedro-r-marques/keras-opt

我默认使用"cg",但你也应该可以使用"l-bfgs"。看看单元测试的用法示例。我会尽快添加文档。

有人有L-BFGS算法的Tensorflow 2 tf.keras子类吗?

是的,这里有(另一个(实现L-BFGS(以及任何其他scipy.optimize.minimize求解器(供您考虑,以防它适合您的用例:

  • https://pypi.org/project/kormos/
  • https://github.com/mbhynes/kormos

这个包的目标与Pedro上面的答案类似,但如果你在训练中遇到内存消耗问题,我建议你使用keras-opt包。我在尝试构建Rendle型因子分解机时实现了kormos,并与其他全批求解器实现保持OOMing。

这两个选项使用起来相当麻烦,尤其是在使用自定义模型时。因此,我计划实现tf.keras.optimizer的自定义子类,以使用L-BFGS。但在我开始之前,我很好奇,是否有人已经完成了这项任务?

同意,将tfpscipy的签名拟合到keras中的参数拟合过程中有点麻烦,因为keras进出优化器的方式在调用之间具有持久状态,这不是大多数[老派?]优化库的工作方式。

这在kormos包中得到了专门的解决,因为在原型设计过程中,IMO是一种非常常见的工作流程,可以在随机优化器和全批确定性优化器之间进行切换,这应该足够简单,可以在python解释器中进行即席处理。

该软件包具有扩展keras.Modelkeras.Sequential:的型号

  • kormos.models.BatchOptimizedModel
  • kormos.models.BatchOptimizedSequentialModel

这些可以编译为适合标准或scipy解算器;它看起来像这样:

from tensorflow import keras
from kormos.models import BatchOptimizedSequentialModel
# Create an Ordinary Least Squares regressor
model = BatchOptimizedSequentialModel()
model.add(keras.layers.Dense(
units=1,
input_shape=(5,),
))
# compile the model for stochastic optimization
model.compile(loss=keras.losses.MeanSquaredError(), optimizer="sgd")
model.fit(...)
# compile the model for deterministic optimization using scipy.optimize.minimize
model.compile(loss=keras.losses.MeanSquaredError(), optimizer="L-BFGS-B")
model.fit(...)

最新更新