使用GridSearchCV优化Keras模型中的时期

时间:2019-08-03 21:37:07

标签: python optimization keras neural-network gridsearchcv

我看过各种文章/指南以及Udemy课程,建议优化通过GridSearchCV来训练Keras模型的时期数是一个好主意。

  1. 训练模型达400个历元时,您也训练了200个历元。
  2. 训练模型达到400个时期时,最好的时期可以是400个时期中的任何一个。

也就是说,如果您使用GridSearchCV训练模型,则该方法没有考虑到这一点,而是在比较不同模型时仅考虑最后一个时期。而当您为200和400个纪元执行GridSearchCV时,它将训练200个纪元的模型,然后从头开始为400个纪元训练模型。

因此,据我所见,使用GridSearchCV可以优化您所需要的纪元数:

  1. 训练“重复”,“无用”的时代。
  2. 尽管可以获取信息,但实际上并没有找到最佳的时期。

我的问题是:

  • 一种了解正在运行的时代的方法更有意义吗?为什么有人会在实践中使用上述方法?
  • 如果所描述的方法是一种不好的方法,并且我想以更优化的方式进行这种搜索,那么是否有任何“标准”的方法可以做到?也许早停下来?如果我们正在优化多个超参数怎么办?提早停止+ GridSearchCV?

谢谢。

2 个答案:

答案 0 :(得分:1)

查看EarlyStopping Keras回调。 当参数化指标未在某个时期内得到改善时,提早停止回调将停止训练,并始终返回使所选指标最大化的模型。另外,根据您的用例,耐心kwarg应该会很有用。

在此处检查文档:https://keras.io/callbacks/

要找到最佳的超参数,请检查Keras调谐器:https://github.com/keras-team/keras-tuner

答案 1 :(得分:0)

您甚至可以结合使用Keras Tuner和提早停止的回调,这样您可以同时优化多个超参数。

在定义调谐器搜索功能时,您可以添加回调:

import tensorflow as tf

tuner.search(
  train_data,
  validation_data=validation_data,
  epochs=number_of_epochs,
  callbacks=[tf.keras.callbacks.EarlyStopping(patience=1)]
)

使用Keras Tuner,您可以选择不同的调谐器。

图书馆文档中有示例,或者您也可以查看此tutorial on how to use Keras Tuner for hyperparameter tuning