首页 > 解决方案 > 有没有办法在 scikit-learn MLPClassifier 上使用 Nadam 优化器?

问题描述

我正在尝试对scikit-learn 的 MLPClassifier使用不同的优化器。据他们的文档显示,只有几个solvers(MLPClassifier 的优化器参数)可用,它们是:

  • 'lbfgs' 是准牛顿方法家族中的优化器。
  • 'sgd' 指的是随机梯度下降。
  • “adam”指的是由 Kingma、Diederik 和 Jimmy Ba 提出的基于随机梯度的优化器

我正在尝试使用的是另一个名为Nadam的。我尝试将一些参数与solver='adam'and混合来实现它nesterovs_momentum=True,但 sklearn 的文档说最后一个参数仅用于sgd

是否使用涅斯捷罗夫的动量。仅在求解器 ='sgd' 且动量 > 0 时使用。

我已经尝试了上述方法,因为我认为这意味着keras 的 nadam所说的:

就像 Adam 本质上是带有动量的 RMSprop,Nadam 是带有 Nesterov 动量的 RMSprop。

由于这一切,我不认为我在做正确的事。我下面的代码显示了我到目前为止所做的事情。

from sklearn.neural_network import MLPClassifier
clf = MLPClassifier(solver='adam', nesterovs_momentum=True,)

标签: pythonkerasscikit-learn

解决方案


您不能提供nesterovs_momentumadam优化器。

要看到这一点,您应该查看github上的BaseMultilayerPerceptron代码。

将 SGDOptimizer 接受的参数与 AdamOptimizer接受参数进行比较。

你会看到adam根本不接受nesterovs_momentum


推荐阅读