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)


相关推荐

  • windows10下关闭端口占用[通俗易懂]

    windows10下关闭端口占用[通俗易懂]windows10下关闭端口占用windows10下关闭端口占用占用查询端口的pid查询关闭对应pid很少用windows,但是本地开发一直都是windows系统,如果端口发生意外,没有被关闭,如下可解决。占用查询端口的pid查询C:\Users\helloworld>netstat-ano|findstr"9097"TCP0.0.0….

  • 搭建自己的Android浏览器(一)[通俗易懂]

    搭建自己的Android浏览器(一)[通俗易懂]搭建自己的Android浏览器(一)最近尝试Android端开发,想开发一个自己的Android浏览器,根据自己的想法个性化定制,开博客用于记录和分享。Android开发环境搭建浏览器设想

  • linux杀死进程命令kill_linux彻底杀死进程

    linux杀死进程命令kill_linux彻底杀死进程kill-9进程名杀死进程

  • 数组去重的方法java_五种数组去重方法的性能比较「建议收藏」

    数组去重的方法java_五种数组去重方法的性能比较「建议收藏」为什么要写这篇文章之前参与面试一名外包程序员的时候,我要求他手写一个数组去重的方法,当时他使用了对象保存数值,通过查询去重。我表示表占用了空间,能不能只操作数组本身,减少空间占用。当时我想的是用indexOf和splice来操作数组,查询到index不等于i的时候,使用splice删除元素,之后自己跑了一遍发现函数执行时间非常长,所以想着研究一下效率比较高的去重方法。去重方法介…

  • PostgreSQL ISO 8601

    PostgreSQL ISO 8601国际标准化组织的国际标准ISO8601是日期和时间的表示方法,全称为《数据存储和交换形式·信息交换·日期和时间的表示方法》。目前最新为第三版ISO8601:2004,第一版为ISO8601:1988,第二版为ISO8601:2000。(摘自百度百科)selectcast(‘2018-08-05T11:00:00Z’astimestamp),–标准时间 cast(‘2018-08-0…

    2022年10月28日
  • java中数组怎么定义_java中数组的定义

    java中数组怎么定义_java中数组的定义展开全部数组的定义语法有两种:typearrayName[];type[]arrayName;type为Java中的任意数据类62616964757a686964616fe58685e5aeb931333365646364型,包括基本类型和组合类型,arrayName为数组名,必须是一个合法的标识符,[]指明该变量是一个数组类型变量。/***数组的三种定义方法**1.数组类型[]数…

发表回复

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

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