CNN基础四:监测并控制训练过程的法宝——Keras回调函数和TensorBoard
训练模型时,很多事情一开始都无法预测。比如之前我们为了找出迭代多少轮才能得到最佳验证损失,可能会先迭代100次,迭代完成后画出运行结果,发现在中间就开始过拟合了,于是又重新开始训练。
类似的情况很多,于是我们想要实时监测训练动态,并能根据训练情况及时对模型采取一定的措施。Keras中的回调函数和tf的TensorBoard就是为此而生。
Keras回调函数
回调函数(callbacks)是在调用fit时传入模型的一个对象,它在训练过程中的不同时间点都会被模型调用。它可以访问关于模型状态和性能的所有可用数据,还可以采取行动:中断训练、保存模型、加载一组不同的权重或者改变模型的状态。也就是说,之前在训练模型的过程中,我们不知道模型的实时状态,因此为了更好的监测和控制模型的训练过程,我们派出了一个特派员——回调函数,它可以根据情况记录、反馈或者采取措施。我们熟悉的训练进度条和fit返回的history都是回调函数,只不过它俩因为太常用,所以被单独拎出来。
fit和fit_generator函数都提供了callbacks接口。常用的回调函数有:
- ModelCheckpoint(在每轮过后保存当前模型);
- EarlyStopping(如果监控参数得不到改善就中断训练);
- LearningRateScheduler(在训练过程中动态调整学习率);
- ReduceLROnPlateau(如果验证表现得不到改善,可以用它降低学习率,跳出局部最小值);
- CSVLogger(将每个epoch的结果写入CSV文件)。
- 其他回调函数,也可以根据需要自行编写。
应用示例:
from keras.callbacks import EarlyStopping, ModelCheckpoint, ReduceLROnPlateau
#fit提供callbacks接口,接收一个回调函数列表,可将任意个回调函数传入模型中
callback_lists = []
callback_lists.append(EarlyStopping(monitor = 'acc', #监控模型的验证精度
patience = 1)) #如果精度在多于一轮的时间(即两轮)内不再改善,就中断训练
callback_lists.append(ModelCheckpoint(filepath = 'my_model.h5', #目标文件的保存路径
monitor = 'val_loss', #监控验证损失
save_best_only = True)) #只保存最佳模型
callback_lists.append(ReduceLROnPlateau(monitor = 'val_loss', #监控模型的验证损失
factor = 0.1, #触发时将学习率乘以系数0.1
patience = 10) #若验证损失在10轮内都没有改善,则触发该回调函数
#由于回调函数要监控验证损失和验证精度,所以在调用fit时需要传入validation_data
model.fit(x, y, epochs = 10, batch_size = 32,
callbacks = callbacks_list,
validation_data = (x_val, y_val))
TensorBoard:实时可视化工具
TensorBoard是内置于TensorFlow中基于浏览器的可视化工具,安装TensorFlow时会自动安装这个工具。简单来说,它就是把训练过程数据写入文件,然后用浏览器查看的工具。在Keras中,它也被包装成一个回调函数。
示例如下:
#引入Tensorboard
from keras.callbacks import TensorBoard
#定义回调函数列表,现在只放一个简单的TensorBoard
log_path = './logs' #指定TensorBoard读取的文件路径,可以新建一个
callback_lists = [TensorBoard(log_dir=log_path, histogram_freq=1)]
#模型调用fit时,通过回调函数接口传入
model.fit(...inputs and parameters..., callbacks=callback_lists)
为了在训练的过程中可视化各项指标,需要自己在终端启动TensorBoard。
打开终端的方式有两种:一种是系统自带的终端cmd;另一种是在Anaconda Prompt终端。选择用哪种终端打开,根据当时安装tensorflow时用的终端方式。我试了下cmd,总是出错,但在Anaconda Prompt终端就能正常启动。
启动方式:在终端输入 tensorboard --logdir=C:\Users...\logs (自己文件的路径),就会返回一行信息,包含了一个http网址。这个地址一般是不会改变的,在浏览器中输入提示的http地址,即可查看模型的训练过程和相关状态,如下图所示。


Reference
书籍:Python深度学习
CNN基础四:监测并控制训练过程的法宝——Keras回调函数和TensorBoard的更多相关文章
- iNeuOS工业互联平台,PLC监测与控制应用过程案例。新闻:.NET 6 RC1 正式发布
目 录 1. 概述... 1 2. 平台演示... 2 3. 应用过程... 2 1. 概述 iNeuOS工业互联网操作系统主要使用.netcore 3. ...
- 51定时器控制4各led,使用回调函数机制
程序转载自51hei,经过自己的实际验证,多了一种编程的思路技能,回调函数的基本思想也是基于事件机制的,哪个事件来了, 就执行哪个事件. 程序中,最多四个子定时器,说明51的处理速度是不够的,在中断中 ...
- CNN基础一:从头开始训练CNN进行图像分类(猫狗大战为例)
本文旨在总结一次从头开始训练CNN进行图像分类的完整过程(猫狗大战为例,使用Keras框架),免得经常遗忘.流程包括: 从Kaggle下载猫狗数据集: 利用python的os.shutil库,制作训练 ...
- CNN基础二:使用预训练网络提取图像特征
上一节中,我们采用了一个自定义的网络结构,从头开始训练猫狗大战分类器,最终在使用图像增强的方式下得到了82%的验证准确率.但是,想要将深度学习应用于小型图像数据集,通常不会贸然采用复杂网络并且从头开始 ...
- 深度学习基础(CNN详解以及训练过程1)
深度学习是一个框架,包含多个重要算法: Convolutional Neural Networks(CNN)卷积神经网络 AutoEncoder自动编码器 Sparse Coding稀疏编码 Rest ...
- 卷积神经网络(CNN)的训练过程
卷积神经网络的训练过程 卷积神经网络的训练过程分为两个阶段.第一个阶段是数据由低层次向高层次传播的阶段,即前向传播阶段.另外一个阶段是,当前向传播得出的结果与预期不相符时,将误差从高层次向底层次进行传 ...
- 从零搭建Pytorch模型教程(四)编写训练过程--参数解析
前言 训练过程主要是指编写train.py文件,其中包括参数的解析.训练日志的配置.设置随机数种子.classdataset的初始化.网络的初始化.学习率的设置.损失函数的设置.优化方式的设置. ...
- 卷积神经网络(CNN)基础介绍
本文是对卷积神经网络的基础进行介绍,主要内容包含卷积神经网络概念.卷积神经网络结构.卷积神经网络求解.卷积神经网络LeNet-5结构分析.卷积神经网络注意事项. 一.卷积神经网络概念 上世纪60年代. ...
- CNN基础框架简介
卷积神经网络简介 卷积神经网络是多层感知机的变种,由生物学家休博尔和维瑟尔在早期关于猫视觉皮层的研究发展而来.视觉皮层的细胞存在一个复杂的构造,这些细胞对视觉输入空间的子区域非常敏感,我们称之为感受野 ...
随机推荐
- apache You don't have permission to access / on this server.无权访问
环境:ubuntu16.4 apache2 原因:修改了apache web项目路径 解决: 1. 修改 /etc/apache2/sites-available/000-default.conf 文 ...
- 计蒜客NOIP模拟D1T2
原题: 蒜头君有一棵有根树,树的每一边都有边权,蒜头君想知道任意两点间最短距离之和为多少.另外,由于各种原因,蒜头君的树的边的边权会发生若干次改变,蒜头君想让你告诉他,每一次改变后,任意两点间最短距离 ...
- controllerpom
<properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> &l ...
- centos在线安装mysql报错:file /etc/my.cnf conflicts between attempted installs of mysql-community-server-8.0.16-2.el7.x86_64 and MariaDB-common-10.4.6-1.el7.centos.x86_64
错误提示:file /etc/my.cnf conflicts between attempted installs of mysql-community-server-8.0.16-2.el7.x8 ...
- spring boot jar的支持
- 富文本框编辑器实现:a、支持图片复制粘贴;b、支持word复制粘贴图文。
Chrome+IE默认支持粘贴剪切板中的图片,但是我要发布的文章存在word里面,图片多达数十张,我总不能一张一张复制吧?Chrome高版本提供了可以将单张图片转换在BASE64字符串的功能.但是无法 ...
- 【Linux】运维常用命令
1.查看进程 ps -ef 如果需要查看特定的进程,比如redis的 ps -ef | grep redis 2.强制杀死进程 kill -9 进程id 3.忽略输出后台启动 nohup ./red ...
- 【CF1100F】Ivan and Burgers(线性基,分治)
题意:给定n个数,每个数为c[i],有q个询问,每次询问从第l个到第r个数字的最大xor和 n,q<=5e5,c[i]<=1e6,时限3s 思路:直接线段树维护区间线性基是3个log,会T ...
- 【靶场练习_sqli-labs】SQLi-LABS Page-1(Basic Challenges)
GET篇 Less-1: 1.用order by得出待查表里有三个字段 http://192.168.40.165/sqli-labs-master/Less-1/?id=1' order by 3 ...
- [CSP-S模拟测试]:小奇的矩阵(matrix)(DP+数学)
题目背景 小奇总是在数学课上思考奇怪的问题. 题目描述 给定一个$n\times m$的矩阵,矩阵中的每个元素$a_{i,j}$为正整数.接下来规定: $1.$合法的路径初始从矩阵左上角出发,每 ...