浅谈keras.callbacks设置模型保存策略


Posted in Python onJune 18, 2020

如下所示:

keras.callbacks.ModelCheckpoint(self.checkpoint_path,
verbose=0, save_weights_only=True,mode="max",save_best_only=True),

默认是每一次poch,但是这样硬盘空间很快就会被耗光.

将save_best_only 设置为True使其只保存最好的模型,值得一提的是其记录的acc是来自于一个monitor_op,其默认为"val_loss",其实现是取self.best为 -np.Inf. 所以,第一次的训练结果总是被保存.

mode模式自动为auto 和 max一样,还有一个min的选项...应该是loss没有负号的时候用的....

https://keras.io/callbacks/ 浏览上面的文档.

# Print the batch number at the beginning of every batch.
batch_print_callback = LambdaCallback(
 on_batch_begin=lambda batch,logs: print(batch))
 
# Stream the epoch loss to a file in JSON format. The file content
# is not well-formed JSON but rather has a JSON object per line.
import json
json_log = open('loss_log.json', mode='wt', buffering=1)
json_logging_callback = LambdaCallback(
 on_epoch_end=lambda epoch, logs: json_log.write(
 json.dumps({'epoch': epoch, 'loss': logs['loss']}) + '\n'),
 on_train_end=lambda logs: json_log.close()
)
 
# Terminate some processes after having finished model training.
processes = ...
cleanup_callback = LambdaCallback(
 on_train_end=lambda logs: [
 p.terminate() for p in processes if p.is_alive()])
 
model.fit(...,
  callbacks=[batch_print_callback,
   json_logging_callback,
   cleanup_callback])

Keras的callback 一般在model.fit函数使用,由于Keras的便利性.有很多模型策略以及日志的策略.

比如 当loss不再变化时停止训练

keras.callbacks.EarlyStopping(monitor='val_loss', min_delta=0, patience=0, verbose=0, mode='auto', baseline=None, restore_best_weights=False)

比如日志传送远程服务器等,以及自适应的学习率scheduler.

确实很便利....

补充知识:keras callbacks常用功能如ModelCheckpoint、ReduceLROnPlateau,EarlyStopping等

ModelCheckpoint:

keras.callbacks.ModelCheckpoint(filepath,monitor='val_loss',verbose=0,save_best_only=False, save_weights_only=False, mode='auto', period=1)

参数:

filename:字符串,保存模型的路径(可以将模型的准确率和损失等写到路径中,格式如下:)

ModelCheckpoint('model_check/'+'ep{epoch:d}-acc{acc:.3f}-val_acc{val_acc:.3f}.h5',monitor='val_loss')

还可以添加损失值等如

‘loss{loss:.3f}-val_loss{val_loss:.3f}'

monitor:需要检测的值如测试集损失或者训练集损失等

save_best_only:当设置为True时,监测值有改进时才会保存当前的模型

verbose:信息展示模式,0或1(当为1时会有如下矩形框的信息提示)

浅谈keras.callbacks设置模型保存策略

mode:‘auto',‘min',‘max'之一,在save_best_only=True时决定性能最佳模型的评判准则,例如,当监测值为val_acc时,模式应为max,当监测值为val_loss时,模式应为min。在auto模式下,评价准则由被监测值的名字自动推断。

save_weights_only:若设置为True,则只保存模型权重,否则将保存整个模型

period:CheckPoint之间的间隔的epoch数

参考代码如下:

在使用时传递给fit中callbacks即可

checkpoint = ModelCheckpoint(log_dir + "ep{epoch:03d}-loss{loss:.3f}- 
        val_loss{val_loss:.3f}.h5",
        monitor='val_loss', save_weights_only=True, 
        save_best_only=True, period=1)
train_history=model.fit_generator(data_generator_wrap(),
         steps_per_epoch=max(1, num_train//batch_size),
        validation_data=data_generator_wrap(),
        validation_steps=max(1, num_val//batch_size),
        epochs=40,
        initial_epoch=0,callbacks=[logging, reduce_lr,checkpoint])

ReduceLROnPlateau:

keras.callbacks.ReduceLROnPlateau(monitor='val_loss', factor=0.1, patience=10, verbose=0, mode='auto', epsilon=0.0001, cooldown=0, min_lr=0)

当评价指标不在提升时,减少学习率

当学习停滞时,减少2倍或10倍的学习率常常能获得较好的效果。该回调函数检测指标的情况,如果在patience个epoch中看不到模型性能提升,则减少学习率

参数

monitor:被监测的量

factor:每次减少学习率的因子,学习率将以lr = lr*factor的形式被减少

patience:当patience个epoch过去而模型性能不提升时,学习率减少的动作会被触发

mode:‘auto',‘min',‘max'之一,在min模式下,如果检测值触发学习率减少。在max模式下,当检测值不再上升则触发学习率减少。

epsilon:阈值,用来确定是否进入检测值的“平原区”

cooldown:学习率减少后,会经过cooldown个epoch才重新进行正常操作

min_lr:学习率的下限

参考代码如下:

reduce_lr = ReduceLROnPlateau(monitor='val_loss', factor=0.1, patience=3, verbose=1)
train_history = model.fit(data(),validation_data=datae_g(),epochs=40,callbacks=[logging, reduce_lr, checkpoint])
EarlyStopping
keras.callbacks.EarlyStopping(monitor='val_loss', patience=0, verbose=0, mode='auto')

当监测值不再改善时,该回调函数将中止训练

参数

monitor:需要监视的量

patience:当early stop被激活(如发现loss相比上一个epoch训练没有下降),则经过patience个epoch后停止训练。

verbose:信息展示模式

mode:‘auto',‘min',‘max'之一,在min模式下,如果检测值停止下降则中止训练。在max模式下,当检测值不再上升则停止训练。

以上这篇浅谈keras.callbacks设置模型保存策略就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python批量导出导入MySQL用户的方法
Nov 15 Python
天翼开放平台免费短信验证码接口使用实例
Dec 18 Python
python获取当前日期和时间的方法
Apr 30 Python
python中numpy包使用教程之数组和相关操作详解
Jul 30 Python
解读python logging模块的使用方法
Apr 17 Python
树莓派与PC端在局域网内运用python实现即时通讯
Jun 22 Python
Django的性能优化实现解析
Jul 30 Python
详解Python中的正斜杠与反斜杠
Aug 09 Python
python爬虫开发之Request模块从安装到详细使用方法与实例全解
Mar 09 Python
pyecharts调整图例与各板块的位置间距实例
May 16 Python
python中not、and和or的优先级与详细用法介绍
Nov 03 Python
Python使用pyecharts控件绘制图表
Jun 05 Python
用python实现名片管理系统
Jun 18 #Python
Python 为什么推荐蛇形命名法原因浅析
Jun 18 #Python
python退出循环的方法
Jun 18 #Python
keras实现多GPU或指定GPU的使用介绍
Jun 17 #Python
Python字符串格式化常用手段及注意事项
Jun 17 #Python
python代码区分大小写吗
Jun 17 #Python
python代码中怎么换行
Jun 17 #Python
You might like
自己动手做一个SQL解释器
2006/10/09 PHP
PHP新手入门学习方法
2011/05/08 PHP
PHP仿博客园 个人博客(2) 数据库增添改删
2013/07/05 PHP
Yii净化器CHtmlPurifier用法示例(过滤不良代码)
2016/07/15 PHP
CI(CodeIgniter)框架视图中加载视图的方法
2017/03/24 PHP
jQuery 连续列表实现代码
2009/12/21 Javascript
深入理解JavaScript系列(6):S.O.L.I.D五大原则之单一职责SRP
2012/01/15 Javascript
JavaScript打印iframe内容示例代码
2013/08/20 Javascript
js完美实现@提到好友特效(兼容各大浏览器)
2015/03/16 Javascript
详解Weex基于Vue2.0开发模板搭建
2017/03/20 Javascript
微信小程序中的onLoad详解及简单实例
2017/04/05 Javascript
JS中精巧的自动柯里化实现方法
2017/12/12 Javascript
使用Ajax和Jquery配合数据库实现下拉框的二级联动的示例
2018/01/25 jQuery
javascript实现蒙版与禁止页面滚动
2020/01/11 Javascript
Python中的浮点数原理与运算分析
2017/10/12 Python
Python中对象的引用与复制代码示例
2017/12/04 Python
python编写简易聊天室实现局域网内聊天功能
2018/07/28 Python
python  Django中的apps.py的目的是什么
2018/10/15 Python
Django后台admin的使用详解
2019/07/08 Python
pymysql模块的操作实例
2019/12/17 Python
Python递归调用实现数字累加的代码
2020/02/25 Python
Pytest框架之fixture的详细使用教程
2020/04/07 Python
windows支持哪个版本的python
2020/07/03 Python
详解selenium + chromedriver 被反爬的解决方法
2020/10/28 Python
浅析HTML5中的 History 模式
2017/06/22 HTML / CSS
世界领先的艺术图书出版社:TASCHEN
2018/07/23 全球购物
Cinque网上商店:德国服装品牌
2019/03/17 全球购物
房地产开发计划书
2014/01/10 职场文书
出生医学证明样本
2014/01/17 职场文书
创业大赛策划书
2014/03/01 职场文书
校园公益广告语
2014/03/13 职场文书
就业协议书样本
2014/08/20 职场文书
综合素质自我评价怎么写
2014/09/14 职场文书
志愿者个人总结
2015/03/03 职场文书
原料仓管员岗位职责
2015/04/01 职场文书
乡镇党建工作总结2015
2015/05/19 职场文书