浅谈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 相关文章推荐
启动targetcli时遇到错误解决办法
Oct 26 Python
python+splinter自动刷新抢票功能
Sep 25 Python
Python实现定期检查源目录与备份目录的差异并进行备份功能示例
Feb 27 Python
python2与python3爬虫中get与post对比解析
Sep 18 Python
解析Python3中的Import
Oct 13 Python
python 消除 futureWarning问题的解决
Dec 25 Python
Python连接Oracle之环境配置、实例代码及报错解决方法详解
Feb 11 Python
Python count函数使用方法实例解析
Mar 23 Python
Django实现列表页商品数据返回教程
Apr 03 Python
Python参数传递实现过程及原理详解
May 14 Python
基于python实现银行管理系统
Apr 20 Python
python使用torch随机初始化参数
Mar 22 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
PHP 配置open_basedir 让各虚拟站点独立运行
2009/11/12 PHP
memcached 和 mysql 主从环境下php开发代码详解
2010/05/16 PHP
如何让CI框架支持service层
2014/10/29 PHP
php版微信自动获取收货地址api用法示例
2016/09/22 PHP
PHP十六进制颜色随机生成器功能示例
2017/07/24 PHP
Array.prototype.slice 使用扩展
2010/06/09 Javascript
利用JQuery动画制作滑动菜单项效果实现步骤及代码
2013/02/07 Javascript
js的toUpperCase方法用法实例
2015/01/27 Javascript
js由下向上不断上升冒气泡效果实例
2015/05/07 Javascript
程序员必知35个jQuery 代码片段
2015/11/05 Javascript
JavaScript中String对象的方法介绍
2017/01/04 Javascript
node操作mysql数据库实例详解
2017/03/17 Javascript
js闭包学习心得总结
2018/04/17 Javascript
nodejs实现套接字服务功能详解
2018/06/21 NodeJs
JavaScript实现简单随机点名器
2019/11/21 Javascript
jQuery插件simplePagination的使用方法示例
2020/04/28 jQuery
js实现小球在页面规定的区域运动
2020/06/16 Javascript
Javascript Symbol原理及使用方法解析
2020/10/22 Javascript
Vue组件生命周期运行原理解析
2020/11/25 Vue.js
[53:15]2018DOTA2亚洲邀请赛3月29日 小组赛A组 LGD VS TNC
2018/03/30 DOTA
Python探索之ModelForm代码详解
2017/10/26 Python
python3编写ThinkPHP命令执行Getshell的方法
2019/02/26 Python
在Python中使用Neo4j的方法
2019/03/14 Python
Python3.5常见内置方法参数用法实例详解
2019/04/29 Python
Flask中endpoint的理解(小结)
2019/12/11 Python
python飞机大战pygame游戏框架搭建操作详解
2019/12/17 Python
python 实现网易邮箱邮件阅读和删除的辅助小脚本
2021/03/01 Python
CSS3模拟动画下拉菜单效果
2017/04/12 HTML / CSS
社区道德讲堂实施方案
2014/03/21 职场文书
群众路线自我剖析材料
2014/10/08 职场文书
财务人员廉洁自律心得体会
2016/01/13 职场文书
2016教师六五普法学习心得体会
2016/01/21 职场文书
导游词之包公祠
2019/11/25 职场文书
mysql中varchar类型的日期进行比较、排序等操作的实现
2021/11/17 MySQL
css3中2D转换之有趣的transform形变效果
2022/02/24 HTML / CSS
解决spring.thymeleaf.cache=false不起作用的问题
2022/06/10 Java/Android