浅谈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读取图片属性信息的实现方法
Sep 11 Python
Python 获取当前所在目录的方法详解
Aug 02 Python
python写入已存在的excel数据实例
May 03 Python
使用sklearn进行对数据标准化、归一化以及将数据还原的方法
Jul 11 Python
使用Python实现跳帧截取视频帧
May 31 Python
PyQt5使用QTimer实现电子时钟
Jul 29 Python
Python如何把多个PDF文件合并代码实例
Feb 13 Python
一文了解python 3 字符串格式化 F-string 用法
Mar 04 Python
解决Python中导入自己写的类,被划红线,但不影响执行的问题
Jul 13 Python
Python模块常用四种安装方式
Oct 20 Python
Python经纬度坐标转换为距离及角度的实现
Nov 01 Python
python如何构建mock接口服务
Jan 28 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中3种方法统计字符串中每种字符的个数并排序
2012/08/27 PHP
php获取网页中图片、DIV内容的简单方法
2014/06/19 PHP
php提交post数组参数实例分析
2015/12/17 PHP
详解WordPress开发中get_header()获取头部函数的用法
2016/01/08 PHP
laravel 解决crontab不执行的问题
2019/10/22 PHP
基于JavaScript实现 获取鼠标点击位置坐标的方法
2013/04/12 Javascript
有关javascript的性能优化 (repaint和reflow)
2013/04/12 Javascript
jquery validation验证身份证号,护照,电话号码,email(实例代码)
2013/11/06 Javascript
node.js使用npm 安装插件时提示install Error: ENOENT报错的解决方法
2014/11/20 Javascript
KnockoutJS 3.X API 第四章之表单submit、enable、disable绑定
2016/10/10 Javascript
基于JS组件实现拖动滑块验证功能(代码分享)
2016/11/18 Javascript
Vue.js双向绑定实现原理详解
2016/12/22 Javascript
解决webpack -p压缩打包react报语法错误的方法
2017/07/03 Javascript
vue watch普通监听和深度监听实例详解(数组和对象)
2018/08/16 Javascript
详解vue-router数据加载与缓存使用总结
2018/10/29 Javascript
vue单页面实现当前页面刷新或跳转时提示保存
2018/11/02 Javascript
ES6中new Function()语法及应用实例分析
2020/02/19 Javascript
vue2.x数组劫持原理的实现
2020/04/19 Javascript
微信小程序通过websocket实时语音识别的实现代码
2020/08/19 Javascript
在vue中使用image-webpack-loader实例
2020/11/12 Javascript
[01:56]林书豪DOTA2上海特级锦标赛励志短片
2016/03/05 DOTA
[01:10:57]Liquid vs OG 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
[01:21:07]EG vs Liquid 2018国际邀请赛淘汰赛BO3 第一场 8.25
2018/08/29 DOTA
python处理xml文件的方法小结
2017/05/02 Python
Python实现字典(dict)的迭代操作示例
2018/06/05 Python
详解Matplotlib绘图之属性设置
2019/08/23 Python
10个Python面试常问的问题(小结)
2019/11/20 Python
pytorch中获取模型input/output shape实例
2019/12/30 Python
婚鞋、新娘鞋、礼服鞋、童鞋:Nina Shoes
2019/09/04 全球购物
轻金属冶金专业毕业生自荐信
2013/11/02 职场文书
幼儿园亲子活动方案
2014/01/29 职场文书
出纳员岗位职责风险
2014/03/06 职场文书
房屋出售授权委托书
2014/10/12 职场文书
个人查摆剖析材料
2014/10/16 职场文书
模范教师事迹材料
2014/12/16 职场文书
学风建设主题班会
2015/08/17 职场文书