zoukankan      html  css  js  c++  java
  • 深度学习基础——Epoch、Iteration、Batchsize

    原文地址:https://www.cnblogs.com/Johnny-z6951/p/11201081.html

    梯度下降是一个在机器学习中用于寻找较佳结果(曲线的最小值)的迭代优化算法。梯度的含义是斜率或者斜坡的倾斜度。下降的含义是代价函数的下降。算法是迭代的,意思是需要多次使用算法获取结果,以得到最优化结果。梯度下降的迭代性质能使欠拟合演变成获得对数据的较佳拟合。

      梯度下降中有一个称为学习率的参量。刚开始学习率较大,因此下降步长更大。随着点的下降,学习率变得越来越小,从而下降步长也变小。同时,代价函数也在减小,或者说代价在减小,有时候也称为损失函数或者损失,两者是一样的。(损失/代价的减小是一个概念)。只有在数据很庞大的时候,我们才需要使用epochs,batchsize,iteration。在这种情况下,一次性将数据输入计算机是不可能的。因此,为了解决这个问题,我们需要把数据分成小块,一块一块的传递给计算机,在每一步的末端更新神经网络的权重,拟合给定的数据。

     

    batchsize:批量大小(批量尺寸)。

      即,批量大小将决定我们一次训练的样本数目。batchsize将影响到模型的优化程度和速度。其作用主要在于:batchsize的正确选择是为了在内存效率和内存容量之间寻找最佳平衡。相对于正常数据集,如果Batch_Size过小,训练数据就会非常难收敛,从而导致underfitting。增大Batch_Size,相对处理速度加快。增大Batch_Size,所需内存容量增加(epoch的次数需要增加以达到最好的结果)这里我们发现上面两个矛盾的问题,因为当epoch增加以后同样也会导致耗时增加从而速度下降。因此我们需要寻找最好的Batch_Size。

      适当的增加Batch_Size:
      1.通过并行化提高内存利用率。

      2.单次epoch的迭代次数减少,提高运行速度。(单次epoch=(全部训练样本/batchsize)/iteration=1)

      3.适当的增加Batch_Size,梯度下降方向准确度增加,训练震动的幅度减小。

    iteration:迭代。

      迭代是重复反馈的动作,神经网络中我们希望通过迭代进行多次的训练以达到所需的目标或结果。每一次迭代得到的结果都会被作为下一次迭代的初始值。

      一个迭代=一个正向通过+一个反向通过。

    epoch:时期。

      一个时期=所有训练样本的一个正向传递和一个反向传递。

      样本数据集有 60000 张图片作为训练数据,10000 张图片作为测试数据。假设现在选择  Batch Size = 100 对模型进行训练。迭代30000次。

      • 每个 Epoch 要训练的图片数量:60000(训练集上的所有图像)
      • 训练集具有的 Batch 个数: 60000/100=600
      • 每个 Epoch 需要完成的 Batch 个数: 600
      • 每个 Epoch 具有的 Iteration 个数: 600(完成一个Batch训练,相当于参数迭代一次)
      • 每个 Epoch 中发生模型权重更新的次数:600
      • 训练 10 个Epoch后,模型权重更新的次数: 600*10=6000
      • 不同Epoch的训练,其实用的是同一个训练集的数据。第1个Epoch和第10个Epoch虽然用的都是训练集的60000图片,但是对模型的权重更新值却是完全不同的。因为不同Epoch的模型处于代价函数空间上的不同位置,模型的训练代越靠后,越接近谷底,其代价越小。
      • 总共完成30000次迭代,相当于完成了 30000/600=50 个Epoch
  • 相关阅读:
    Redis原理篇
    Redis基础
    CentOS7 Redis5.0.5环境搭建
    通用后台管理系统(10)项目打包、修改配置文件、项目开源地址
    通用后台管理系统(9)-编写首页接口、实现、控制器
    通用后台管理系统(8)-编写登入控制器
    生成常用的msf
    badusb资料收集
    后渗透之meterpreter攻略
    linux命令备忘录
  • 原文地址:https://www.cnblogs.com/lzhu/p/11745246.html
Copyright © 2011-2022 走看看