【问题标题】:Sklearn stop on loss plateau during manual training [closed]Sklearn在手动训练期间停止损失高原[关闭]
【发布时间】:2019-12-26 21:14:44
【问题描述】:

使用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.。但是,因为我手动控制迭代,它实际上并没有停止,而且我无法在我的代码中确定是否已打印此消息以便手动停止它。

【问题讨论】:

  • 您能否更具体地说明您认为在训练过程中需要与模型进行交互的原因?
  • 如果损失在最大迭代次数之前达到稳定水平,我希望能够尽早停止它。
  • 此外,它会在每次迭代中连续打印出Training loss did not improve... 消息,一旦它识别到已经达到一个平台,尽管实际上并没有停止。如果可能的话,我希望它在达到那个点时真正停止。
  • 如果我可以访问partial_fit 在详细模式下打印出的训练损失值,那就足够了。但我似乎连那个都无法访问。

标签: python-3.x scikit-learn classification loss-function


【解决方案1】:

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

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

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

【讨论】:

  • 谢谢,这就是我所需要的;只要我可以访问损失值,我就可以继续。我会对此进行测试并确保它是我需要的。
  • 附带说明:如果您需要更复杂的方法,我建议使用 keras 来处理神经网络。 :)
  • 最后,有什么方法可以阻止Training loss did not improve... 消息的写入?
  • 其实,我刚刚发现我可以在每次迭代开始时设置_no_improvement_count = 0,并且消息永远不会被打印出来。
猜你喜欢
  • 1970-01-01
  • 2017-11-10
  • 2021-08-01
  • 2016-02-23
  • 1970-01-01
  • 2022-10-19
  • 1970-01-01
  • 2017-08-24
  • 1970-01-01
相关资源
最近更新 更多