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

作者:audiocool 时间:2021-08-11 10:56:30 

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不断上升,说明网络结构设计不当,训练超参数设置不当,数据集经过清洗等问题。(最不好的情况)

来源:https://blog.csdn.net/audio_algorithm/article/details/89468096

标签:keras,epoch,batch,loss,val,loss
0
投稿

猜你喜欢

  • 一文带你搞懂JS中导入模块import和require的区别

    2023-07-21 03:24:18
  • python 使用csv模块读写csv格式文件的示例

    2021-04-24 15:58:28
  • jQuery模板提案

    2010-03-30 18:27:00
  • 最新整理Python中的type和object的示例详解

    2023-08-10 05:21:44
  • python简单猜数游戏实例

    2023-10-05 21:31:55
  • CSS双线边框研究

    2009-09-03 12:12:00
  • python 基于selenium实现鼠标拖拽功能

    2022-10-30 17:03:07
  • Javascript调试之console对象——你不知道的一些小技巧

    2023-08-07 19:24:14
  • 教你轻松了解MySQL数据库中的结果字符串

    2009-02-23 17:29:00
  • [翻译]寻找圣杯 In Search of the Holy Grail

    2008-11-12 13:10:00
  • 详解用python计算阶乘的几种方法

    2021-11-17 00:00:14
  • 注册表单的改进分解

    2008-05-31 17:19:00
  • Python批量生成幻影坦克图片实例代码

    2021-04-17 03:16:17
  • 设计原则-控件Balloons(气球状提示)

    2009-08-15 12:34:00
  • 在asp里通过以下两个函数实现javascript里的escape函数和unescape函数功能

    2010-03-14 11:30:00
  • 极简主义网站设计:寓丰富于简单

    2009-12-07 21:37:00
  • torch.optim优化算法理解之optim.Adam()解读

    2023-06-24 23:30:25
  • 使用Python画了一棵圣诞树的实例代码

    2022-06-18 23:55:04
  • Python中return用法案例详解

    2022-09-09 10:35:40
  • Jupyter Notebook读取csv文件出现的问题及解决

    2023-08-09 23:11:50
  • asp之家 网络编程 m.aspxhome.com