浅谈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 相关文章推荐
详解appium+python 启动一个app步骤
Dec 20 Python
在Python 不同级目录之间模块的调用方法
Jan 19 Python
详解python算法之冒泡排序
Mar 05 Python
python基于paramiko将文件上传到服务器代码实现
Jul 08 Python
初次部署django+gunicorn+nginx的方法步骤
Sep 11 Python
Python 中list ,set,dict的大规模查找效率对比详解
Oct 11 Python
使用python和pygame制作挡板弹球游戏
Dec 03 Python
python中的 zip函数详解及用法举例
Feb 16 Python
Python 使用 environs 库定义环境变量的方法
Feb 25 Python
jupyter notebook 调用环境中的Keras或者pytorch教程
Apr 14 Python
详细分析Python垃圾回收机制
Jul 01 Python
Keras构建神经网络踩坑(解决model.predict预测值全为0.0的问题)
Jul 07 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
一个改进的UBB类
2006/10/09 PHP
用穿越火线快速入门php面向对象
2012/02/22 PHP
PHP缓存集成库phpFastCache用法
2014/12/15 PHP
smarty循环嵌套用法示例分析
2016/07/19 PHP
PHP开发实现微信退款功能示例
2017/11/25 PHP
Alliance vs AM BO3 第一场2.13
2021/03/10 DOTA
jQuery链式操作如何实现以及为什么要用链式操作
2013/01/17 Javascript
jQuery学习笔记之 Ajax操作篇(三) - 过程处理
2014/06/23 Javascript
比较常见的javascript中定义函数的区别
2015/11/09 Javascript
JavaScript观察者模式(经典)
2015/12/09 Javascript
js实现精确到秒的日期选择器完整实例
2016/04/30 Javascript
Vue.js每天必学之指令系统与自定义指令
2016/09/07 Javascript
angularjs点击图片放大实现上传图片预览
2017/02/24 Javascript
ES6中Symbol类型用法实例详解
2017/04/06 Javascript
JavaScript数据结构中栈的应用之表达式求值问题详解
2017/04/11 Javascript
vue router路由嵌套不显示问题的解决方法
2017/06/17 Javascript
基于Vue实现图书管理功能
2017/10/17 Javascript
JS脚本实现网页自动秒杀点击
2018/01/11 Javascript
Element输入框带历史查询记录的实现示例
2019/01/15 Javascript
微信小程序 扭蛋抽奖机css3动画实现详解
2019/07/19 Javascript
vue路由传参三种基本方式详解
2019/12/09 Javascript
快速解决Vue、element-ui的resetFields()方法重置表单无效的问题
2020/08/12 Javascript
在Python中使用cookielib和urllib2配合PyQuery抓取网页信息
2015/04/25 Python
使用Python3制作TCP端口扫描器
2017/04/17 Python
Python列表切片用法示例
2017/04/19 Python
selenium使用chrome浏览器测试(附chromedriver与chrome的对应关系表)
2018/11/29 Python
移动端html5模拟长按事件的实现方法
2018/09/30 HTML / CSS
印度尼西亚最完整和最大的在线药房网站:Farmaku.com
2019/11/23 全球购物
模特大赛策划方案
2014/05/28 职场文书
绿色环保口号
2014/06/12 职场文书
师德先进个人材料
2014/12/20 职场文书
个人政治思想总结
2015/03/05 职场文书
证券区域经理岗位职责
2015/04/10 职场文书
2015年学校消防安全工作总结
2015/10/14 职场文书
2016年“世界气象日”广播稿
2015/12/17 职场文书
Python Django项目和应用的创建详解
2021/11/27 Python