【问题标题】:How to set numbers of epoch in scikit-learn mlpregressor?如何在 scikit-learn mlpregressor 中设置纪元数?
【发布时间】:2018-03-18 22:01:51
【问题描述】:

我正在尝试使用 scikit-learn MLPRegressor 进行一些监督学习。我想知道 epoch 数量在监督学习中的作用是什么。

但是当我这样设置 MLP 时:

mlp = MLPRegressor(max_iter=100, learning_rate_init=0.1)

然后这个:

mlp = MLPRegressor(max_iter=200, learning_rate_init=0.1)

然后这个:

mlp = MLPRegressor(max_iter=500, learning_rate_init=0.1)

预测分数保持不变。 我不知道使用 max_iter 设置 epoch 的数量是否正确,因为尽管我更改了 max_iter 的数量,但预测分数是恒定的。 但是当我改变学习率时,分数会发生变化,所以有一些学习率的杠杆作用。

有人可以帮忙吗?谢谢

【问题讨论】:

    标签: python scikit-learn epoch


    【解决方案1】:

    使用max_iter确实是限制epoch数的正确方法。来自MLPRegressor的文档:

    ma​​x_iter:int,可选,默认 200 最大迭代次数。求解器迭代直到收敛(由“tol”确定)或迭代次数。对于随机求解器(‘sgd’、‘adam’),请注意这决定了 epoch 的数量(每个数据点将被使用多少次),而不是梯度步数。

    请注意,它们的实现还针对tol 参数进行了收敛检查,即,当两次迭代之间的成本变化小于tol 时,学习将停止。 tol 默认设置为 0.0001 (10e-4),这对于您的用例/训练数据可能会或可能不会有太大的容忍度。

    在您的情况下,似乎甚至在 100 次迭代之前就达到了这个精度 (max_iter=100)。

    【讨论】:

    • 感谢您提供的信息。就我而言,它甚至在 10、20、30 次迭代中都没有变化。它与 100、500 或 1000 次迭代保持相同
    【解决方案2】:

    粗略地说,通过使优化器能够在训练集中搜索更长时间的最佳解决方案,epoch 的数量起到了杠杆作用。但正如@fxx 所述,如果两次迭代之间的成本变化不小于tol,则 MLPRegressor 实现会停止迭代次数。在您的情况下,您可以减少 tol 参数以强制算法运行更长时间。

    此外,为了提高您的实现性能,您还可以检查算法的learning_rate。 0.1 可能有点过大,因此优化器可能会过冲。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-01-31
      • 2016-04-09
      • 2013-07-16
      • 2018-01-30
      • 2019-09-11
      • 1970-01-01
      • 2018-09-23
      • 2013-04-10
      相关资源
      最近更新 更多