Keras EarlyStopping

发布时间 2023-09-11 00:07:23作者: emanlee

from keras.callbacks import EarlyStopping, ModelCheckpoint

 

es = EarlyStopping(monitor='val_loss', patience=2, restore_best_weights=True)

 

为了获得性能良好的神经网络,网络定型过程中需要进行许多关于所用设置(超参数)的决策。超参数之一是定型周期(epoch)的数量:亦即应当完整遍历数据集多少次(一次为一个epoch)?如果epoch数量太少,网络有可能发生欠拟合(即对于定型数据的学习不够充分);如果epoch数量太多,则有可能发生过拟合(即网络对定型数据中的“噪声”而非信号拟合)。

早停法旨在解决epoch数量需要手动设置的问题。它也可以被视为一种能够避免网络发生过拟合的正则化方法(与L1/L2权重衰减和丢弃法类似)。

目的还是解决过拟合!

========================================================

使用该函数的目的是为了防止过拟合,因为在我们训练模型的过程中,很有可能出现过拟合的情况。这个时候训练集表现很好,但是验证集表现就会下降。这时候我们需要提前结束训练,得到“最佳”(只能判断是在全局范围内最佳)的结果。

EarlyStopping(monitor='val_loss', min_delta=0,
 patience=10, verbose=2, mode='auto', restore_best_weights=True)

对于参数的解释

monitor: 监控的变量,例如 val_acc,val_loss。如果要保存最高的精度,则应将检查点设置为monitor =’val_acc’,它将自动以最高的精度保存.最低的损耗不一定与最高的精度相对应
min_delta: monitor的最小变化,如果绝对值小于min_delta,则可以看作对于结果没有improvement,默认为0。
patience: 没有改善的epoch数。比如例子中为10次内都没有改变。
verbose:日志显示
    verbose = 0 为不在标准输出流输出日志信息
    verbose = 1 为输出进度条记录
    verbose = 2 为每个epoch输出一行记录

mode: auto, min, max三者之一. 在最小模式下,当监控量停止下降时,培训将停止; 在最大模式下,当监控量停止增加时,它将停止; 在自动模式下,从监控数量的名称自动推断方向。
restore_best_weights: 若为True,将会取整个训练过程中最佳监控值的epoch训练结果作为最终模型权值,否则将以最后一次epoch的结果作为最终模型权值。

 

优缺点



虽然早停法简单易懂,也很好操作,但是也存在很大的缺陷。比如当模型剧烈波动的时候可能会停的太早,以至于不能得到想要的“好结果”。另外由于原理过于简单,对于复杂的问题往往统一用一种方式进行评判,也不能很好的得到恰当的结论。
除了使用早停法防止过拟合,还有一种方法为正则化方法,详见深入理解L1、L2正则化
——
链接:https://blog.csdn.net/I_canjnu/article/details/106034367

 

========================================================

tf.keras.callbacks.EarlyStopping函数

类 EarlyStopping

继承自: Callback

定义在:tensorflow/python/keras/callbacks.py。

当监测数量停止改善时停止训练。

参数:

  • monitor:要监测的数量。
  • min_delta:在被监测的数据中被认为是提升的最小变化,即绝对变化小于min_delta,将被视为没有提升。
  • patience:没有进步的训练轮数,在这之后训练就会被停止。
  • verbose:详细信息模式。
  • mode:{"auto", "min", "max"}其中之一。在min模式中,当监测的数量停止减少时,训练将停止;在max模式下,当监测的数量停止增加时,它将停止;在auto模式下,从监测数量的名称自动推断方向。
  • baseline:受监测的数量的基线值。如果模型没有显示基线的改善,训练将停止。
  • restore_best_weights:是否从具有监测数量的最佳值的时期恢复模型权重。如果为False,则使用在训练的最后一步获得的模型权重。

========================================================

callback = tf.keras.callbacks.EarlyStopping(monitor='loss', patience=3)
# This callback will stop the training when there is no improvement in
# the loss for three consecutive epochs.
model = tf.keras.models.Sequential([tf.keras.layers.Dense(10)])
model.compile(tf.keras.optimizers.SGD(), loss='mse')
history = model.fit(np.arange(100).reshape(5, 20), np.zeros(5),
                    epochs=10, batch_size=1, callbacks=[callback],
                    verbose=0)
len(history.history['loss'])  # Only 4 epochs are run.

 

========================================================

https://keras.io/api/models/model_training_apis/#fit-method

https://www.w3cschool.cn/tensorflow_python/tf_keras_callbacks_EarlyStopping.html

http://www.manongjc.com/detail/30-hkzupqpqsmqjvvd.html

========================================================

 

 

========================================================