浅谈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 网络编程起步(Socket发送消息)
Sep 06 Python
Python自定义函数的创建、调用和函数的参数详解
Mar 11 Python
以视频爬取实例讲解Python爬虫神器Beautiful Soup用法
Jan 20 Python
Python 使用with上下文实现计时功能
Mar 09 Python
matlab中实现矩阵删除一行或一列的方法
Apr 04 Python
Python使用dict.fromkeys()快速生成一个字典示例
Apr 24 Python
Django中自定义模型管理器(Manager)及方法
Sep 23 Python
Python如何根据时间序列数据作图
May 12 Python
Python新手学习装饰器
Jun 04 Python
使用npy转image图像并保存的实例
Jul 01 Python
教你怎么用Python监控愉客行车程
Apr 29 Python
Python实现照片卡通化
Dec 06 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资源管理框架Assetic简介
2014/06/12 PHP
提高php编程效率技巧
2015/08/13 PHP
CI框架中类的自动加载问题分析
2016/11/21 PHP
php数值转换时间及时间转换数值用法示例
2017/05/18 PHP
Jquery.LazyLoad.js修正版下载,实现图片延迟加载插件
2011/03/12 Javascript
JS限制上传图片大小不使用控件在本地实现
2012/12/19 Javascript
jquery配合css简单实现返回顶部效果
2013/09/30 Javascript
Extjs4中Form的使用之本地hiddenfield
2013/11/26 Javascript
jQuery中关于ScrollableGridPlugin.js(固定表头)插件的使用逐步解析
2014/07/17 Javascript
详解Node.js如何开发命令行工具
2016/08/14 Javascript
AngularJs Dependency Injection(DI,依赖注入)
2016/09/02 Javascript
基于vue实现swipe轮播组件实例代码
2017/05/24 Javascript
jQuery+datatables插件实现ajax加载数据与增删改查功能示例
2018/04/17 jQuery
vue实现学生录入系统之添加删除功能
2018/07/11 Javascript
浅谈Angularjs中不同类型的双向数据绑定
2018/07/16 Javascript
对Layer UI 模块化的用法详解
2019/09/26 Javascript
js实现旋转的星空效果
2019/11/01 Javascript
Python数组定义方法
2016/04/13 Python
Python 中的 else详解
2016/04/23 Python
Python爬虫爬取一个网页上的图片地址实例代码
2018/01/16 Python
python 将大文件切分为多个小文件的实例
2019/01/14 Python
解决Tensorboard可视化错误:不显示数据 No scalar data was found
2020/02/15 Python
python numpy库linspace相同间隔采样的实现
2020/02/25 Python
基于Python下载网络图片方法汇总代码实例
2020/06/24 Python
Python爬虫爬取博客实现可视化过程解析
2020/06/29 Python
用React加CSS3实现微信拆红包动画效果
2017/03/13 HTML / CSS
分享一个H5原生form表单的checkbox特效代码
2018/02/26 HTML / CSS
美国领先的户外服装与装备用品店:Moosejaw
2016/08/25 全球购物
Pam & Gela官网:美国性感前卫女装品牌
2018/07/19 全球购物
大学新生军训方案
2014/05/03 职场文书
十佳好少年事迹材料
2014/08/21 职场文书
2015年父亲节寄语
2015/03/23 职场文书
工作感言一句话
2015/08/01 职场文书
nginx简单配置多个server的方法
2021/03/31 Servers
MySQL选择合适的备份策略和备份工具
2022/06/01 MySQL
python manim实现排序算法动画示例
2022/08/14 Python