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切片用法实例教程
Sep 08 Python
浅析Python中的join()方法的使用
May 19 Python
分享几道你可能遇到的python面试题
Jul 24 Python
python对配置文件.ini进行增删改查操作的方法示例
Jul 28 Python
Python内置模块logging用法实例分析
Feb 12 Python
Python实现字符串的逆序 C++字符串逆序算法
May 28 Python
Python实现的北京积分落户数据分析示例
Mar 27 Python
解决Python发送Http请求时,中文乱码的问题
Apr 30 Python
终于搞懂了Keras中multiloss的对应关系介绍
Jun 22 Python
Python使用Selenium实现淘宝抢单的流程分析
Jun 23 Python
Windows下pycharm安装第三方库失败(通用解决方案)
Sep 17 Python
基于tensorflow __init__、build 和call的使用小结
Feb 26 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
全国FM电台频率大全 - 27 陕西省
2020/03/11 无线电
PHP输出控制功能在简繁体转换中的应用
2006/10/09 PHP
分割GBK中文遭遇乱码的解决方法
2013/08/09 PHP
php简单实现查询数据库返回json数据
2015/04/16 PHP
javascript 面向对象全新理练之原型继承
2009/12/03 Javascript
javascript 自动填写表单的实现方法
2010/04/09 Javascript
仅img元素创建后不添加到文档中会执行onload事件的解决方法
2011/07/31 Javascript
基于jquery的多彩百分比 动态进度条 投票效果显示效果实现代码
2011/08/28 Javascript
jQuery News Ticker 基于jQuery的即时新闻行情展示插件
2011/11/05 Javascript
jquery 如何动态添加、删除class样式方法介绍
2012/11/07 Javascript
js中的异常处理try...catch使用介绍
2013/09/21 Javascript
node.js中的events.emitter.removeListener方法使用说明
2014/12/10 Javascript
基于jquery实现一个滚动的分步注册向导-附源码
2015/08/26 Javascript
zepto中使用swipe.js制作轮播图附swipeUp,swipeDown不起效果问题
2015/08/27 Javascript
jqTransform美化表单
2015/10/10 Javascript
JS模态窗口返回值兼容问题的完美解决方法
2016/05/28 Javascript
全面解析JavaScript里的循环方法之forEach,for-in,for-of
2020/04/20 Javascript
JS触发服务器控件的单击事件(详解)
2016/08/06 Javascript
jQuery替换节点用法示例(使用replaceWith方法)
2016/09/08 Javascript
jQuery web 组件 后台日历价格、库存设置的代码
2016/10/14 Javascript
Web前端框架Angular4.0.0 正式版发布
2017/03/28 Javascript
JS实现提示效果弹出及延迟隐藏的功能
2019/08/26 Javascript
javascript实现左右缓动动画函数
2020/11/25 Javascript
Python urllib、urllib2、httplib抓取网页代码实例
2015/05/09 Python
python下paramiko模块实现ssh连接登录Linux服务器
2015/06/03 Python
Python爬虫获取op.gg英雄联盟英雄对位胜率的源码
2021/01/29 Python
html5给汉字加拼音加进度条的实现代码
2020/04/07 HTML / CSS
彪马加拿大官网:PUMA加拿大
2018/10/04 全球购物
英国打印机墨盒销售网站:Ink Factory
2019/10/07 全球购物
自主招生自荐信
2013/12/08 职场文书
《生命的药方》教学反思
2014/04/08 职场文书
中职三好学生事迹材料
2014/08/24 职场文书
2014年学生资助工作总结
2014/12/18 职场文书
2015年电信员工工作总结
2015/05/26 职场文书
用javascript制作qq注册动态页面
2021/04/14 Javascript
vue中this.$http.post()跨域和请求参数丢失的解决
2022/04/08 Vue.js