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中django框架通过正则搜索页面上email地址的方法
Mar 21 Python
Python中的字符串查找操作方法总结
Jun 27 Python
Python变量和数据类型详解
Feb 15 Python
Django自定义插件实现网站登录验证码功能
Apr 19 Python
Python字符串和字典相关操作的实例详解
Sep 23 Python
Python+matplotlib实现计算两个信号的交叉谱密度实例
Jan 08 Python
python读取一个目录下所有txt里面的内容方法
Jun 23 Python
Python3实现的判断回文链表算法示例
Mar 08 Python
Python FTP文件定时自动下载实现过程解析
Nov 12 Python
PyQt5连接MySQL及QMYSQL driver not loaded错误解决
Apr 29 Python
pytorch 如何把图像数据集进行划分成train,test和val
May 31 Python
Django对接elasticsearch实现全文检索的示例代码
Aug 02 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
PHP函数分享之curl方式取得数据、模拟登陆、POST数据
2014/06/04 PHP
PHP数组对象与Json转换操作实例分析
2019/10/22 PHP
Nigma vs Alliance BO5 第三场2.14
2021/03/10 DOTA
JavaScript面向对象设计二 构造函数模式
2011/12/20 Javascript
js 走马灯简单实例
2013/11/21 Javascript
深入浅析javascript立即执行函数
2015/10/23 Javascript
jquery实现手风琴效果
2015/11/20 Javascript
JavaScript截取指定长度字符串点击可以展开全部代码
2015/12/04 Javascript
jQuery插件实现文字无缝向上滚动效果代码
2016/02/25 Javascript
最佳的JavaScript错误处理实践
2016/07/16 Javascript
HTML5+jQuery实现搜索智能匹配功能
2017/03/24 jQuery
jquery实现图片上传前本地预览
2017/04/28 jQuery
JS中Swiper的使用和轮播图效果
2017/08/11 Javascript
node.js基于fs模块对系统文件及目录进行读写操作的方法详解
2017/11/10 Javascript
nodejs基于mssql模块连接sqlserver数据库的简单封装操作示例
2018/01/05 NodeJs
修改npm全局安装模式的路径方法
2018/05/15 Javascript
js面向对象封装级联下拉菜单列表的实现步骤
2021/02/08 Javascript
[01:14:31]Secret vs VG 2018国际邀请赛淘汰赛BO3 第一场 8.23
2018/08/24 DOTA
[49:35]KG vs SECRET 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/19 DOTA
[01:00:14]DOTA2-DPC中国联赛 正赛 Ehome vs Elephant BO3 第二场 2月28日
2021/03/11 DOTA
Python通过正则表达式选取callback的方法
2015/07/18 Python
Python之Scrapy爬虫框架安装及使用详解
2017/11/16 Python
python3安装speech语音模块的方法
2018/12/24 Python
使用Django开发简单接口实现文章增删改查
2019/05/09 Python
在Tensorflow中实现梯度下降法更新参数值
2020/01/23 Python
python中68个内置函数的总结与介绍
2020/02/24 Python
详解html5页面 rem 布局适配方法
2018/01/12 HTML / CSS
html5 figure和figcaption的使用方法
2018/09/10 HTML / CSS
白俄罗斯在线大型超市:e-dostavka.by
2019/07/25 全球购物
应聘医药代表职位求职信
2013/10/21 职场文书
工程负责人任命书
2014/06/06 职场文书
励志演讲稿大全
2014/08/21 职场文书
一份文言文检讨书
2014/09/13 职场文书
公司老总年会致辞
2015/07/30 职场文书
Python使用scapy模块发包收包
2021/05/07 Python
手把手教你实现PyTorch的MNIST数据集
2021/06/28 Python