Keras框架中的epoch、bacth、batch size、iteration使用介绍


Posted in Python onJune 10, 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指定batchsize

具体的测试可以将keras中的第6.4程序

1、Sequential情况下

如果想要指定批次的大小,需要在第一层的输入形状中使用batch_input_shape

而不能使用input_shape,因为input_shape不能指定批次的大小,批次只能为None

input_shape和batch_input_shape。

input_shape 不包含批量大小,

batch_input_shape是全情投入的形状,包括批量大小。

2、函数式情况下

Input参数

shape: 一个尺寸元组(整数),不包含批量大小。A shape tuple (integer), not including the batch size. 例如,shape=(32,) 表明期望的输入是按批次的 32 维向量。

batch_shape: 一个尺寸元组(整数),包含批量大小。 例如,batch_shape=(10, 32) 表明期望的输入是 10 个 32 维向量。

batch_shape=(None, 32) 表明任意批次大小的 32 维向量。

以上这篇Keras框架中的epoch、bacth、batch size、iteration使用介绍就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
学习python的几条建议分享
Feb 10 Python
Python重新引入被覆盖的自带function
Jul 16 Python
详解Python2.x中对Unicode编码的使用
Apr 03 Python
python使用tornado实现登录和登出
Jul 28 Python
使用pip发布Python程序的方法步骤
Oct 11 Python
python 动态生成变量名以及动态获取变量的变量名方法
Jan 20 Python
Numpy对数组的操作:创建、变形(升降维等)、计算、取值、复制、分割、合并
Aug 28 Python
Python数据可视化:顶级绘图库plotly详解
Dec 07 Python
python 通过视频url获取视频的宽高方式
Dec 10 Python
使用python 将图片复制到系统剪贴中
Dec 13 Python
Python json格式化打印实现过程解析
Jul 21 Python
python中函数返回多个结果的实例方法
Dec 16 Python
Python3.9 beta2版本发布了,看看这7个新的PEP都是什么
Jun 10 #Python
JAVA及PYTHON质数计算代码对比解析
Jun 10 #Python
keras 使用Lambda 快速新建层 添加多个参数操作
Jun 10 #Python
matplotlib 生成的图像中无法显示中文字符的解决方法
Jun 10 #Python
Tensorflow中k.gradients()和tf.stop_gradient()用法说明
Jun 10 #Python
PySide2出现“ImportError: DLL load failed: 找不到指定的模块”的问题及解决方法
Jun 10 #Python
浅谈Python中的字符串
Jun 10 #Python
You might like
利用递归把多维数组转为一维数组的函数
2006/10/09 PHP
PHP中鲜为人知的10个函数
2014/02/28 PHP
php检测url是否存在的方法
2015/04/14 PHP
php 微信公众平台开发模式实现多客服的实例代码
2016/11/07 PHP
爱恋千雪-US-AscII加密解密工具(网页加密)下载
2007/06/06 Javascript
jquery 上下滚动广告
2009/06/17 Javascript
JQuery通过Ajax提交表单并返回结果
2011/07/31 Javascript
轻量级的原生js日历插件calendar.js使用指南
2015/04/28 Javascript
jQuery实现响应鼠标滚动的动感菜单效果
2015/09/21 Javascript
学习JavaScript正则表达式
2015/11/13 Javascript
bootstrap3 兼容IE8浏览器!
2016/05/02 Javascript
JQuery手速测试小游戏实现思路详解
2016/09/20 Javascript
基于jQuery实现火焰灯效果导航菜单
2017/01/04 Javascript
微信小程序 slider的简单实例
2017/04/19 Javascript
使用JavaScript开发跨平台的桌面应用详解
2017/07/27 Javascript
JQuery中queue方法用法示例
2019/01/31 jQuery
JavaScript判断对象和数组的两种方法
2019/05/31 Javascript
javascript实现摄像头拍照预览
2019/09/30 Javascript
详解React 元素渲染
2020/07/07 Javascript
详解Vue中的自定义指令
2020/12/07 Vue.js
PyMongo安装使用笔记
2015/04/27 Python
python爬虫获取多页天涯帖子
2018/02/23 Python
kaggle+mnist实现手写字体识别
2018/07/26 Python
Python实现KNN(K-近邻)算法的示例代码
2019/03/05 Python
windows 10 设定计划任务自动执行 python 脚本的方法
2019/09/11 Python
Python 图像对比度增强的几种方法(小结)
2019/09/25 Python
Django项目中使用JWT的实现代码
2019/11/04 Python
Pyinstaller 打包发布经验总结
2020/06/02 Python
汽车检测与维修个人求职信
2013/09/24 职场文书
小学生读书感言
2014/02/12 职场文书
党的群众路线教育实践活动个人对照检查材料(企业)
2014/11/05 职场文书
2015年教师教学工作总结
2015/04/28 职场文书
超搞笑婚前保证书
2015/05/08 职场文书
环保主题班会教案
2015/08/13 职场文书
2016幼儿教师自荐信范文
2016/01/28 职场文书
上帝为你开了一扇窗之Tkinter常用函数详解
2021/06/02 Python