Keras EarlyStopping
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
========================================================
========================================================