有人有L-BFGS算法的Tensorflow 2 tf.keras子类吗?如果一个人想使用L-BFGS,目前有两个(官方(选项:
- TF概率
- 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。但在我开始之前,我很好奇,是否有人已经完成了这项任务?
同意,将tfp
和scipy
的签名拟合到keras
中的参数拟合过程中有点麻烦,因为keras
进出优化器的方式在调用之间具有持久状态,这不是大多数[老派?]优化库的工作方式。
这在kormos
包中得到了专门的解决,因为在原型设计过程中,IMO是一种非常常见的工作流程,可以在随机优化器和全批确定性优化器之间进行切换,这应该足够简单,可以在python解释器中进行即席处理。
该软件包具有扩展keras.Model
和keras.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(...)