keras中epoch,batch,loss,val_loss用法说明


Posted in Python onJuly 02, 2020

1、epoch

Keras官方文档中给出的解释是:“简单说,epochs指的就是训练过程接中数据将被“轮”多少次”

(1)释义:

训练过程中当一个完整的数据集通过了神经网络一次并且返回了一次,这个过程称为一个epoch,网络会在每个epoch结束时报告关于模型学习进度的调试信息。

(2)为什么要训练多个epoch,即数据要被“轮”多次

在神经网络中传递完整的数据集一次是不够的,对于有限的数据集(是在批梯度下降情况下),使用一个迭代过程,更新权重一次或者说使用一个epoch是不够的,需要将完整的数据集在同样的神经网络中传递多次,随着epoch次数增加,神经网络中的权重的更新次数也增加,模型从欠拟合变得过拟合。

2、batch

(1)keras官方文档中给出的解释:

深度学习的优化算法,说白了就是梯度下降。每次的参数更新有两种方式:

第一种,遍历全部数据集算一次损失函数,然后算函数对各个参数的梯度,更新梯度。这种方法每更新一次参数都要把数据集里的所有样本都看一遍,计算量开销大,计算速度慢,不支持在线学习,这种称为Batch gradient descent,批梯度下降

另一种,每看一个数据就算一下损失函数,然后求梯度更新参数,这个称为随机梯度下降,stochastic gradient descent.这个方法速度比较快,但是收敛性能不太好,可能在最优点附近晃来晃去,hit不到最优点,两次参数的更新也有可能互相抵消掉,造成目标函数震荡的比较剧烈。

为了克服两种方法的缺点,现在一般采用的是一种折中手段,mini-batch gradient decent,小批的梯度下降,这种方法把数据分为若干个批,按批来更新参数,这样,一个批中的一组数据共同决定了本次梯度的方向,下降起来就不容易跑偏,减少了随机性。另一方面因为批的样本数与整个数据集相比小了很多,计算量也不是很大。

(2)batch_size:

Keras中参数更新是按批进行的,就是小批梯度下降算法,把数据分为若干组,称为batch,按批更新参数,这样,一个批中的一组数据共同决定了本次梯度的方向,一批数据中包含的样本数量称为batch_size。

3、iteration

将数据分为几个batch而不是一次性通过神经网络时,iteration是batch需要完成一个epoch的次数,也就是number of batches (区别于 batch size) , 在一次epoch中 number of  batches = iteration = 训练样本总数  / batch size

比如,对于一个有2000个训练样本的数据集,将2000个样本分成大小为500的batch,那么完成一个epoch需要4个iteration

4、batch size 和 epoch 的选取

(1)训练网络过程中,一个batch中的样本规模大小,即batch size 和epoch个数一起通过影响更新权重的频率定义了网络学习数据的速度。

对于固定的epoch:

(a)在合理范围内,随着batch size增大,跑完一次epoch所需的迭代数减少,对于相同数据量的处理速度进一步加快,确定的下降方向越准,引起的训练震荡越小。

(b)batch size 过大时,跑完一次epoch所需的迭代数减少,想要达到相同的精度,所花费的时间大大增加了,从而对参数的修正也变得缓慢,batch size增大到一定程度,其确定的下降方向已经基本不再变化

对于固定的batch size:

(a)在合理范围内随着epoch的增加,训练集和测试集的误差呈下降趋势,模型的训练有了效果

(b)随着epoch的继续增加,训练集的误差呈下降而测试集的误差呈上升趋势,模型过拟合训练集对测试集性能不好

(2)实验实验,通过实验+经验选取合适的batch size 和 epoch

训练截图:

keras中epoch,batch,loss,val_loss用法说明

网络的权重参数W在每一个batch size都会进行一次更新,界面显示的loss值是 iteration次batch size训练后loss值的加权求和值。val_loss是跑完一次Epoch后,跑完一次验证集计算的值。

---------训练总结------------

train loss 不断下降,test loss不断下降,说明网络仍在学习;(最好的)

train loss 不断下降,test loss趋于不变,说明网络过拟合;(max pool或者正则化)

train loss 趋于不变,test loss不断下降,说明数据集100%有问题;(检查dataset)

train loss 趋于不变,test loss趋于不变,说明学习遇到瓶颈,需要减小学习率或批量数目;(减少学习率)

train loss 不断上升,test loss不断上升,说明网络结构设计不当,训练超参数设置不当,数据集经过清洗等问题。(最不好的情况)

以上这篇keras中epoch,batch,loss,val_loss用法说明就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python中的闭包实例详解
Aug 29 Python
python循环监控远程端口的方法
Mar 14 Python
Python实现更改图片尺寸大小的方法(基于Pillow包)
Sep 19 Python
Python实现拷贝多个文件到同一目录的方法
Sep 19 Python
Python3实现抓取javascript动态生成的html网页功能示例
Aug 22 Python
分享给Python新手们的几道简单练习题
Sep 21 Python
Python编程实现二分法和牛顿迭代法求平方根代码
Dec 04 Python
python调用函数、类和文件操作简单实例总结
Nov 29 Python
pandas的相关系数与协方差实例
Dec 27 Python
python构造函数init实例方法解析
Jan 19 Python
python识别验证码图片实例详解
Feb 17 Python
python实现磁盘日志清理的示例
Nov 05 Python
Python使用tkinter实现摇骰子小游戏功能的代码
Jul 02 #Python
浅谈keras使用预训练模型vgg16分类,损失和准确度不变
Jul 02 #Python
python脚本和网页有何区别
Jul 02 #Python
keras:model.compile损失函数的用法
Jul 01 #Python
win10安装python3.6的常见问题
Jul 01 #Python
Python代码需要缩进吗
Jul 01 #Python
导致python中import错误的原因是什么
Jul 01 #Python
You might like
php生成随机密码的三种方法小结
2010/09/04 PHP
php实现给图片加灰色半透明效果的方法
2014/10/20 PHP
解析WordPress中的post_class与get_post_class函数
2016/01/04 PHP
laravel-admin select框默认选中的方法
2019/10/03 PHP
laravel解决迁移文件一次删除创建字段报错的问题
2019/10/24 PHP
javascript 操作Word和Excel的实现代码
2009/10/26 Javascript
javascript面向对象编程代码
2011/12/19 Javascript
JS使用for循环遍历Table的所有单元格内容
2014/08/21 Javascript
Jquery-1.9.1源码分析系列(十一)之DOM操作
2015/11/25 Javascript
Jquery实现$.fn.extend和$.extend函数
2016/04/14 Javascript
js时间比较 js计算时间差的简单实现方法
2016/08/26 Javascript
ionic环境配置及问题详解
2017/06/27 Javascript
详解微信小程序设置底部导航栏目方法
2017/06/29 Javascript
原生JS实现Ajax跨域请求flask响应内容
2017/10/24 Javascript
详解vue-cli3使用
2018/08/14 Javascript
详解微信小程序获取当前时间及日期的方法
2019/04/28 Javascript
解决vue-cli输入命令vue ui没效果的问题
2020/11/17 Javascript
[03:30]DOTA2完美“圣”典精彩集锦
2016/12/27 DOTA
[01:09:01]完美世界DOTA2联赛循环赛 Magma vs PXG BO2第一场 10.28
2020/10/28 DOTA
python使用PyGame模块播放声音的方法
2015/05/20 Python
浅谈Python 字符串格式化输出(format/printf)
2016/07/21 Python
Python自定义进程池实例分析【生产者、消费者模型问题】
2016/09/19 Python
利用Python代码实现数据可视化的5种方法详解
2018/03/25 Python
python ChainMap 合并字典的实现步骤
2019/06/11 Python
用Python绘制漫步图实例讲解
2020/02/26 Python
Python3监控windows,linux系统的CPU、硬盘、内存使用率和各个端口的开启情况详细代码实例
2020/03/18 Python
美国专营婴幼儿用品的购物网站:buybuy BABY
2017/01/01 全球购物
新西兰廉价汽车租赁:Snap Rentals
2018/09/14 全球购物
Herschel Supply Co.美国:背包、手提袋及配件
2020/11/24 全球购物
what is the difference between ext2 and ext3
2015/08/25 面试题
《乌塔》教学反思
2014/02/17 职场文书
我的中国梦演讲稿800字
2014/08/19 职场文书
学生会竞选演讲稿纪检部
2014/08/25 职场文书
党员应该树立反腐倡廉的坚定意识思想汇报
2014/09/12 职场文书
pytorch中的numel函数用法说明
2021/05/13 Python
Nginx实现会话保持的两种方式
2022/03/18 Servers