在scikit-learn中训练神经网络时的早期停止

这个问题非常具体,针对Python库scikit-learn。如果有更合适的地方发布这个问题,请告诉我。谢谢!

现在是问题…

我有一个基于BaseEstimator的前馈神经网络类ffnn,我用SGD来训练它。运行良好,我也可以使用GridSearchCV()并行训练它。

现在我想在ffnn.fit()函数中实现早期停止,但为此我还需要访问折叠的验证数据。一种方法是更改sklearn.grid_search.fit_grid_point()中的一行代码,原本是

clf.fit(X_train, y_train, **fit_params)

改成类似于

clf.fit(X_train, y_train, X_test, y_test, **fit_params)

并且也需要更改ffnn.fit()来接受这些参数。这也会影响到sklearn中的其他分类器,这是一个问题。我可以通过在fit_grid_point()中检查某种标志来避免这个问题,该标志告诉我何时以上述两种方式之一调用clf.fit()。

有人能建议一种不同的方法来实现这一点,而不需要编辑sklearn库中的任何代码吗?

或者,将X_train和y_train进一步随机分割成训练/验证集,并检查一个好的停止点,然后在所有X_train上重新训练模型,这样做对吗?

谢谢!


回答:

你可以让你的神经网络模型内部从传入的X_trainy_train中提取一个验证集,例如使用train_test_split函数。

编辑:

或者,将X_train和y_train进一步随机分割成训练/验证集,并检查一个好的停止点,然后在所有X_train上重新训练模型,这样做对吗?

是的,但这样做会很昂贵。你可以只找到停止点,然后只在用于找到停止点的验证数据上进行一次额外的传递。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注