EarlyStopping ゞ 浴缸里的玫瑰 2022-05-28 05:51 34阅读 0赞 # EarlyStopping是什么 # EarlyStopping是Callbacks的一种,callbacks用于指定在每个epoch开始和结束的时候进行哪种特定操作。Callbacks中有一些设置好的接口,可以直接使用,如’acc’,’val\_acc’,’loss’和’val\_loss’等等。 EarlyStopping则是用于提前停止训练的callbacks。具体地,可以达到当训练集上的loss不在减小(即减小的程度小于某个阈值)的时候停止继续训练。 # 为什么要用EarlyStopping # 根本原因就是因为继续训练会导致测试集上的准确率下降。 那继续训练导致测试准确率下降的原因猜测可能是1. 过拟合 2. 学习率过大导致不收敛 3. 使用正则项的时候,Loss的减少可能不是因为准确率增加导致的,而是因为权重大小的降低。 当然使用EarlyStopping也可以加快学习的速度,提高调参效率。 # EarlyStopping的使用与技巧 # 一般是在model.fit函数中调用callbacks,fit函数中有一个参数为callbacks。注意这里需要输入的是list类型的数据,所以通常情况只用EarlyStopping的话也要是\[EarlyStopping()\] EarlyStopping的参数有 * monitor: 监控的数据接口,有’acc’,’val\_acc’,’loss’,’val\_loss’等等。正常情况下如果有验证集,就用’val\_acc’或者’val\_loss’。但是因为笔者用的是5折交叉验证,没有单设验证集,所以只能用’acc’了。 * min\_delta:增大或减小的阈值,只有大于这个部分才算作improvement。这个值的大小取决于monitor,也反映了你的容忍程度。例如笔者的monitor是’acc’,同时其变化范围在70%-90%之间,所以对于小于0.01%的变化不关心。加上观察到训练过程中存在抖动的情况(即先下降后上升),所以适当增大容忍程度,最终设为0.003%。 * patience:能够容忍多少个epoch内都没有improvement。这个设置其实是在抖动和真正的准确率下降之间做tradeoff。如果patience设的大,那么最终得到的准确率要略低于模型可以达到的最高准确率。如果patience设的小,那么模型很可能在前期抖动,还在全图搜索的阶段就停止了,准确率一般很差。patience的大小和learning rate直接相关。在learning rate设定的情况下,前期先训练几次观察抖动的epoch number,比其稍大些设置patience。在learning rate变化的情况下,建议要略小于最大的抖动epoch number。笔者在引入EarlyStopping之前就已经得到可以接受的结果了,EarlyStopping算是锦上添花,所以patience设的比较高,设为抖动epoch number的最大值。 * mode: 就’auto’, ‘min’, ‘,max’三个可能。如果知道是要上升还是下降,建议设置一下。笔者的monitor是’acc’,所以mode=’max’。 min\_delta和patience都和“避免模型停止在抖动过程中”有关系,所以调节的时候需要互相协调。通常情况下,min\_delta降低,那么patience可以适当减少;min\_delta增加,那么patience需要适当延长;反之亦然。
相关 Keras的工程实践:训练时的回调函数(EarlyStopping、记录训练日志、模型持久化ModelCheckpoint、降低学习率)、获取某隐藏层输出(提取某隐藏层特征向量) ![20191009191333910.png][][日萌社][Link 1] [人工智能AI:Keras PyTorch MXNet TensorFlow Paddle 墨蓝/ 2023年07月07日 08:28/ 0 赞/ 40 阅读
相关 EarlyStopping EarlyStopping是什么 EarlyStopping是Callbacks的一种,callbacks用于指定在每个epoch开始和结束的时候进行哪种特定操作。Cal ゞ 浴缸里的玫瑰/ 2022年05月28日 05:51/ 0 赞/ 35 阅读
还没有评论,来说两句吧...