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

 更新时间:2020年06月10日 10:23:31   作者:msmw2  
这篇文章主要介绍了Keras框架中的epoch、bacth、batch size、iteration使用介绍,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

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使用介绍就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • pandas报错AttributeError: DataFrame object has no attribute ix问题

    pandas报错AttributeError: DataFrame object has&

    这篇文章主要介绍了pandas报错AttributeError: DataFrame object has no attribute ix问题及解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-02-02
  • 关于Python中 循环器 itertools的介绍

    关于Python中 循环器 itertools的介绍

    循环器是对象的容器,包含有多个对象。通过调用循环器的next()方法 (__next__()方法,在Python 3.x中),循环器将依次返回一个对象。直到所有的对象遍历穷尽,循环器将举出StopIteration错误。这篇文章将对此做一个详细介绍,感兴趣的小伙伴请参考下面文字内容
    2021-09-09
  • python怎么去除字符串最后的换行符‘\n’

    python怎么去除字符串最后的换行符‘\n’

    这篇文章主要介绍了python去除字符串最后的换行符'\n',本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-04-04
  • python 遍历字符串(含汉字)实例详解

    python 遍历字符串(含汉字)实例详解

    这篇文章主要介绍了python 遍历字符串(含汉字)实例详解的相关资料,需要的朋友可以参考下
    2017-04-04
  • YOLOv5中SPP/SPPF结构源码详析(内含注释分析)

    YOLOv5中SPP/SPPF结构源码详析(内含注释分析)

    其实关于YOLOv5的网络结构其实网上相关的讲解已经有很多了,但是觉着还是有必要再给大家介绍下,下面这篇文章主要给大家介绍了关于YOLOv5中SPP/SPPF结构源码的相关资料,需要的朋友可以参考下
    2022-05-05
  • Python循环语句之while循环和for循环详解

    Python循环语句之while循环和for循环详解

    在Python中,循环语句用于重复执行一段代码,直到满足某个条件为止,在Python中,有两种主要的循环语句:for循环和while循环,本文就来给大家介绍一下这两个循环的用法,需要的朋友可以参考下
    2023-08-08
  • Python中accumulate函数的用法详解

    Python中accumulate函数的用法详解

    累积(accumulate)函数是Python标准库itertools中的一个强大工具,用于对可迭代对象进行累积操作,下面我们将深入探讨accumulate函数的用法,感兴趣的小伙伴可以了解下
    2023-11-11
  • Python数据可视化之Matplotlib和Seaborn的使用教程详解

    Python数据可视化之Matplotlib和Seaborn的使用教程详解

    这篇文章主要为大家详细介绍了Python数据可视化中Matplotlib和Seaborn使用的相关教程,文中的示例代码讲解详细,有需要的可以参考下
    2024-03-03
  • 详解python string类型 bytes类型 bytearray类型

    详解python string类型 bytes类型 bytearray类型

    这篇文章主要介绍了python string类型 bytes类型 bytearray类型,需要的朋友可以参考下
    2017-12-12
  • python实现FFT快速傅立叶变换算法案例

    python实现FFT快速傅立叶变换算法案例

    FFT(快速傅里叶变换)是计算DFT及其逆变换的一种算法,其基本思想是利用DFT的对称性和周期性,通过分而治之的策略将DFT分解为更小的DFT,从而降低计算复杂度,FFT的算法步骤包括选择分解、重新排序、蝶形运算和逐层计算,在Python中
    2024-10-10

最新评论