batchsize怎么设置(aperturesize)

现在很多算法都用到了batch,这里简单说下batchsize如何设置先来介绍下epoch、iteration、batchsize三者区别:batchsize:批大小,在深度学习中,一般采用SGD(随机梯度下降)训练,即每次训练在训练集中取batchsize个样本训练;iteration:1个iteration等于使用batchsize个样本训练一次epoch:1个epoch等于使用训练集中的全部样本训练一次为什么要设batchsize?1.当数据量足够大的时候可以适当的…

大家好,又见面了,我是你们的朋友全栈君。

现在很多算法都用到了batch, 这里简单说下batchsize如何设置

先来介绍下epoch、iteration、batchsize 三者区别:

batchsize:批大小,在深度学习中,一般采用SGD(随机梯度下降)训练,即每次训练在训练集中取batchsize个样本训练;

iteration:1个iteration等于使用batchsize个样本训练一次

epoch:1个epoch等于使用训练集中的全部样本训练一次

 

为什么要设batchsize?

1. 当数据量足够大的时候可以适当的减小batch_size,由于数据量太大,内存不够。需要设置batchsize来降低每次iteration的样本量,从而降低内存占用。 (这也是为什么很多时候我们设置sequence max len变大的时候,相应的batch size就要设小一点)

2. 全量数据噪声较少,相对稳定,梯度容易收敛到局部最优,而一定的batch会带来一些噪声和扰动,在局部最优点容易跳出。

 

batchsize也不能无限降低,batch_size=1时为在线学习,也是标准的SGD,这样学习,如果数据量不大,noise数据存在时,模型容易被noise带偏,如果数据量足够大,noise的影响会被“冲淡”,对模型几乎不影响。

 

batchsize太小会有哪些危害?

1. 会导致模型无法收敛,batchsize太小会引起梯度巨大波动,导致无法收敛

 

增大batchsize的好处:

1. 内存的利用率提高了,大矩阵乘法的并行化效率提高。

2. 跑完一次epoch(全数据集)所需迭代次数减少,对于相同的数据量的处理速度进一步加快。

3. 一定范围内,batchsize越大,其确定的下降方向就越准,引起训练震荡越小

 

batchsize过大的坏处:

1. 当数据集太大时,内存撑不住。

2. (全数据集)所需迭代次数减少了,但要想达到相同的 精度,时间开销太大,参数的修正更加缓慢。

3. batchsize增大到一定的程度,其确定的下降方向已经基本不再变化。

 

经验之谈:

1. batch的选择,首先决定的是下降方向,如果数据集比较小,则完全可以采用全数据集的形式。 

①全数据集的方向能够更好的代表样本总体,确定其极值所在。

②由于不同权重的梯度值差别巨大,因此选取一个全局的学习率很困难。 (这句没太看懂)

2. batch数太小,而类别又比较多的时候,真的可能会导致loss函数震荡而不收敛,尤其是在你的网络比较复杂的时候。

增大batch size能减缓梯度震荡,需要更少的迭代优化次数,收敛的更快,但是每次迭代耗时更长。
https://zhuanlan.zhihu.com/p/31558973

3. 随着batchsize增大,处理相同的数据量的速度越快。

4. 随着batchsize增大,达到相同精度所需要的epoch数量越来越多。

5. Batch_Size 增大到某个时候,达到时间上的最优。由于最终收敛精度会陷入不同的局部极值,因此 Batch_Size 增大到某些时候,达到最终收敛精度上的最优。

6. 过大的batchsize的结果是网络很容易收敛到一些不好的局部最优点。同样太小的batch也存在一些问题,比如训练速度很慢,训练不容易收敛等。

7. 具体的batch size的选取和训练集的样本数目相关。

8. 设置batch的同时,一定记得数据shuffle

9. 显存占用不是和batchsize简单成正比

10. 要想收敛到同一个最优点,使用整个样本集时,虽然迭代次数少,但是每次迭代的时间长,耗费的总时间是大于使用少量样本多次迭代的情况的。

 实际上,工程上在使用GPU训练时,跑一个样本花的时间与跑几十个样本甚至几百个样本的时间是一样的!当然得益于GPU里面超多的核,超强的并行计算能力啦。因此,在工程实际中,从收敛速度的角度来说,小批量的样本集是最优的,也就是我们所说的mini-batch。这时的batch size往往从几十到几百不等,但一般不会超过几千。

batch的size设置的不能太大也不能太小,因此实际工程中最常用的就是mini-batch,一般size设置为几十或者几百。

11.样本量少的时候会带来很大的方差,而这个大方差恰好会导致我们在梯度下降到很差的局部最优点(只是微微凸下去的最优点)和鞍点的时候不稳定,一不小心就因为一个大噪声的到来导致炸出了局部最优点。

与之相反的,当样本量很多时,方差很小,对梯度的估计要准确和稳定的多,因此反而在差劲的局部最优点和鞍点时反而容易自信的呆着不走了,从而导致神经网络收敛到很差的点上,跟出了bug一样的差劲。

12. 对于二阶优化算法,减小batch换来的收敛速度提升远不如引入大量噪声导致的性能下降,因此在使用二阶优化算法时,往往要采用大batch哦。此时往往batch设置成几千甚至一两万才能发挥出最佳性能。

13.GPU对2的幂次的batch可以发挥更佳的性能,因此设置成16、32、64、128…时往往要比设置为整10、整100的倍数时表现更优

 

 

 

参考链接:

https://blog.csdn.net/zqx951102/article/details/88918948 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/127776.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(1)


相关推荐

  • MySQL索引的使用实例

    MySQL索引的使用实例前言这是我听老师讲课做的笔记,考试要看的。这是视频地址作者:陈运智关注我的csdn博客,更多Linux笔记知识还在更新本人只在csdn写博客配套这篇文章观看效果更佳MySQL索引的使用实例一.慢查询日志二.查询分析器——explain三.索引的基本使用四.复合索引五.覆盖索引一.慢查询日志//查看是否开启慢查询日志mysql>showvariableslike’%slow%’;//临时开启慢查询日志mysql>setglobalslow_q

  • Android布局详解之二:LinearLayout

    Android布局详解之二:LinearLayout原创文章,如有转载,请注明出处:http://blog.csdn.net/yihui823/article/details/6702312线性布局。这个布局简单的说,就是所有控件都依次排序,谁也不会覆盖谁。线性布局需要定义一个方向,横向(android:orientation

  • 标志位简介

    标志位简介标志位简介:标志寄存器,又称程序状态寄存器(它的内容是ProgramStatusWord,PSW).这是一个存放条件码标志,控制标志和系统标志的寄存器.6个状态标志位CF—进位标志,加法时的最高位(D7或D15)产生进位或减法时最高位出现借位,则CF=1,否则CF=0;AF—辅助进位标志,供BCD码使用。当D3位出现进位或借位时AF=1,否则AF=0;

  • Jenkins(8)构建触发器之定时构建和轮询 SCM

    Jenkins(8)构建触发器之定时构建和轮询 SCM前言跑自动化用例每次用手工点击jenkins出发自动化用例太麻烦了,我们希望能每天固定时间跑,这样就不用管了,坐等收测试报告结果就行。jenkins的定时任务是用的crontab语法定时构建语法

  • Windows 环境下载 Android 源码「建议收藏」

    Windows 环境下载 Android 源码「建议收藏」Windows环境下载Android源码前言Android官网(该方式不适合Windows平台):https://source.android.com/source/downloading.html可是我就想在Windows中使用SourceInsight看看源代码,当然可以!准备环境安装git安装Python自备梯子硬盘剩余容量最好大…

  • macbook重设密码服务器错误_网页显示500错误

    macbook重设密码服务器错误_网页显示500错误在网上查了查解决方案如下:1。右键我的电脑–管理–本地用户和组,给IUSR_机器名和IWAM_机器名两个用户设置密码,要一样。2。开始–运行–打cmd,然后cdD:InetpubAdminscripts(我的系统在D盘),然后cscript.exeadsutil.vbssetw3svc/wamuserpass你的密码,然后cscript.exeadsutil.vbssetw…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号