Sklearn 在手动训练期间停止损失高原

Sklearn stop on loss plateau during manual training

使用sklearnMLPClassifierfit函数是一个很好的一刀切的解决方案;你调用它一次,它会一直训练直到达到最大迭代次数或训练损失平稳期,所有这些都没有任何交互。但是,我不得不更改我的代码以适应其他一些功能,而标准 fit 函数的可配置性不足以满足我的需求。我重新配置我的代码以使用 partial_fit 代替,手动 运行 一次一个迭代;但我无法弄清楚如何让我的代码识别损失高原的时间,就像在 fit 函数中一样。我似乎找不到 MLPClassifier 的任何属性或方法,可以让我访问由 partial_fit 计算的损失值,以便我可以判断损失是否已经稳定。在我看来,判断每次迭代损失的唯一方法是自己计算,尽管 partial_fit 已经计算了它,甚至以详细模式将其打印到控制台。

编辑:运行 partial_fit 手动仍然会导致训练算法在训练损失停止改善时识别;一旦训练损失趋于稳定,它会在每次迭代后打印消息 Training loss did not improve more than tol=0.000100 for 10 consecutive epochs. Stopping.。但是,因为我手动控制迭代,它实际上并没有停止,而且我无法在我的代码中弄清楚是否已打印此消息以手动停止它。

我建议在列表中手动记录损失:

loss_list = list()
clf =  MLPClassifier()
#partial fit and so on
print(clf.loss_)
loss_list.append(clf.loss_)

如果此代码对您有帮助,我可以为您提供一个停止标准。