项目场景:

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


问题描述:

callback = tf.keras.callbacks.EarlyStopping(monitor=‘val_loss’,min_delta=0.0001, patience=10, restore_best_weights=True)

history = model.fit(X_train_lst, df_y_train.values, epochs=500, batch_size=200, validation_split=0.3,callbacks=[callback])


原因分析:

min_delta:增大或减小的阈值,只有大于这个部分才算作improvement。这个值的大小取决于monitor,也反映了你的容忍程度。本处取为0.0001,即val_loss减小幅度大于0.0001才算有提升,loss不变或增大都算没提升。

patience:能够容忍多少个epoch内都没有improvement。本处取为10。


解决方案:

以下转载自https://blog.csdn.net/silent56_th/article/details/72845912

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的最大值。
min_delta和patience都和“避免模型停止在抖动过程中”有关系,所以调节的时候需要互相协调。通常情况下,min_delta降低,那么patience可以适当减少;min_delta增加,那么patience需要适当延长;反之亦然。

tensorflow2.0:tf.keras.callbacks.EarlyStopping相关推荐

  1. 早停 tf.keras.callbacks.EarlyStopping() 详解【TensorFlow2入门手册】

    函数原型: tf.keras.callbacks.EarlyStopping(monitor='val_loss', min_delta=0, patience=0, verbose=0,mode=' ...

  2. TensorFlow tf.keras.callbacks.EarlyStopping

    参数 描述 monitor 监控的数量 min_delta 小于该值的会被当成模型没有进步 patience 没有进步的训练轮数,在这之后训练就会被停止 verbose 详细信息模式 mode {&q ...

  3. Tensorflow2.0:使用Keras自定义网络实战

    tensorflow2.0建议使用tf.keras作为构建神经网络的高级API 接下来我就使用tensorflow实现VGG16去训练数据 背景介绍: 2012年 AlexNet 在 ImageNet ...

  4. keras和tensorflow使用 keras.callbacks.EarlyStopping 提前结束训练

    此文首发于我的个人博客:keras和tensorflow使用 keras.callbacks.EarlyStopping 提前结束训练 - zhang0peter的个人博客 一般来说机器学习的训练次数 ...

  5. TensorFlow2.0教程-使用keras训练模型

    TensorFlow2.0教程-使用keras训练模型 Tensorflow 2.0 教程持续更新: https://blog.csdn.net/qq_31456593/article/details ...

  6. 调用tensorflow2中的tf.keras.applications.VGG16并进行微调

    调用tensorflow2中的tf.keras.applications.VGG16并进行微调 环境配置:tensorflow版本2.3.0:cuda 10.1:python3.8 数据集:cifar ...

  7. Tensorflow2.0:Faster RCNN 代码详解(一)

    第一部分给出Fater RCNN文件的代码解析,主要是模型主体的执行过程,在此文件 引入下述几个文件的函数引用,对于backbones,necks和test_mixins文件来说,主要是用来构建模型结 ...

  8. TensorFlow2.0(八)--tf.function函数转换

    tf.function函数转换 1. 关于tf.function 2. tf.function 的实现 3. 关于@tf.function 1. 关于tf.function tf.function的官 ...

  9. tensorflow2.1学习--tf.keras学习之tf.keras.models.Sequential

    tf.keras.models.Sequential是描述网络层架构的一个api,是顺序的结构即一层一层的描述,但是对于跳跃式的就不行,需要使用自定义层,或者使用类实现 . import tensor ...

  10. Tensorflow2.0:实战LeNet-5识别MINIST数据集

    LeNet-5模型 1990 年代提出的LeNet-5使卷积神经网络在当时成功商用,下图是 LeNet-5 的网络结构图,它接受32 × 32大小的数字.字符图片,这次将LeNet-5模型用来识别MI ...

最新文章

  1. 泊松回归、gamma回归、Tweedie回归等广义线性回归模型GLM的评估指标:校准曲线、 洛伦兹曲线、卡方检验、AIC、BIC、偏差(Deviance)指标
  2. 用ionic快速开发hybird App(已附源码,在下面+总结见解)
  3. 能够提高开发效率的Eclipse实用操作
  4. makefile运行_NVDIA TX2入门 系列之三:运行Yolov3
  5. linux重启was控制台报错,IHS启动时报错,从was控制台传播插件失败
  6. MyBatisPlus自动生成代码springboot+mybatis+mysql 以及动态sql生成方法(测试可用版)
  7. 推荐系统技术演进趋势:排序篇
  8. 从原理到应用,一文带你了解小程序插件能力
  9. datacount+php,dataCount.php
  10. Asp.net MVC - 使用PRG模式(附源码)
  11. 从捡破烂到亿万富翁,这个快递人的故事比电视剧还励志
  12. win10无法装载iso文件_教你用win10自带虚拟光驱打开iso镜像文件的方法
  13. 日志管理系统,多种方式总结
  14. 名人论数学——数学的本质
  15. 软件开发过程与项目管理
  16. php小写数字变成大写,php 小写数字怎么转大写
  17. python进行谱曲_使用LSTM-GAN为歌词谱曲
  18. 为了提高忠诚度,企业应该从客户关系衡量转向客户关系健康管理
  19. 华为css与堆叠,华为堆叠配置
  20. 计算机连校园网没有弹出页面,我的电脑连接校园网 能连上,但是浏览器不弹出来 登录页面,为何...

热门文章

  1. const 与readonly的异同
  2. windows sesrver2003下搭建DHCP服务器
  3. 一个分组查询的SQL 常用算法(附源码可直接执行)
  4. uniapp某个页面高度占满写法
  5. el-select的写法
  6. 如何用计算机辅助设计进行设计,计算机辅助设计的基本概念和特点
  7. java post 注册_使用post request python注册帐户
  8. java matcher方法_Java正则表达式入坑指南:正则表达式使用的类有哪些吗?
  9. 基于python 爬虫_基于python的爬虫(一)
  10. jq 改数组的k值_在JSON jq中修改键值数组