batch_size的理解

本文参照两篇博客
https://blog.csdn.net/kele_imon/article/details/79765405?utm_source=blogxgwz0
https://blog.csdn.net/qq_34886403/article/details/82558399
直观的理解:
Batch Size定义:一次训练所选取的样本数。
Batch Size的大小影响模型的优化程度和速度。同时其直接影响到GPU内存的使用情况,假如你GPU内存不大,该数值最好设置小一点。

为什么要提出Batch Size?

在没有使用Batch Size之前,这意味着网络在训练时,是一次把所有的数据(整个数据库)
输入网络中,然后计算它们的梯度进行反向传播,由于在计算梯度时使用了整个数据库,
所以计算得到的梯度方向更为准确。但在这情况下,计算得到不同梯度值差别巨大,
难以使用一个全局的学习率,所以这时一般使用Rprop这种基于梯度符号的训练算法,
单独进行梯度更新。 在小样本数的数据库中,不使用Batch Size是可行的,而且效果也很好。
但是一旦是大型的数据库,一次性把所有数据输进网络,肯定会引起内存的爆炸。
所以就提出Batch Size的概念。

1.当数据量足够大的时候可以适当的减小batch_size,由于数据量太大,内存不够。但盲目减少会导致无法收敛,batch_size=1时为在线学习。

2.batch的选择,首先决定的是下降方向,如果数据集比较小,则完全可以采用全数据集的形式。这样做的好处有两点,
1)全数据集的方向能够更好的代表样本总体,确定其极值所在。

2)由于不同权重的梯度值差别巨大,因此选取一个全局的学习率很困难。

3.增大batchsize的好处有三点:

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

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

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

4.盲目增大的坏处有三点:

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

     2)跑完一次epocffe-master/tools/extra/parse_log.sh  caffe-master/tools/extra/extract_seconds.py和h(全数据集)所需迭代次数减少了,但要想达到相同的      精度,时间开销太大,参数的修正更加缓慢。
     3)batchsize增大到一定的程度,其确定的下降方向已经基本不再变化。

总结:

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

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

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

     4)由于上述两种因素的矛盾, Batch_Size 增大到某个时候,达到时间上的最优。

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

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

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

一个具体例子分析:
在分布式训练中,Batch size随着数据并行的workers增加而增大,假如baseline的Batch Size为BB,而学习率为lrlr,训练epoch为NN。假如保持baseline的lrlr,一般达不到很好的收敛速度和精度。
原因:对于收敛速度,假如有KK个workers,则每个批次为KBKB,因此一个epoch迭代的次数为baseline的1k1k,而学习率lrlr不变,所以要达到与baseline相同的收敛情况,epoch要增大。而根据上面公式,epoch最大需要增大KNKN个epoch,但一般情况下不需要增大那么多。
对于收敛精度,由于Batch size的使用使梯度更准确,噪声减少,所以更容易收敛。

  • 24
    点赞
  • 123
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
batch_size的大小需要根据具体情况进行设置。根据引用,在TensorFlow中,可以通过tf.data.batch()函数、生成器或者keras.utils.Sequence实例来设置batch_size。引用指出,batch_size表示一个batch中的样本总数,即一次训练所选取的样本数。batch_size的大小会影响模型的优化程度和速度。较大的batch_size可以加快训练速度,但可能会降低模型的优化程度。相反,较小的batch_size可以提高模型的优化程度,但可能会导致训练速度变慢。 因此,设置batch_size时需要考虑训练数据集的规模和计算资源的限制。如果训练数据较大,而计算资源有限,可以选择较大的batch_size以加快训练速度。如果训练数据较小,或者计算资源充足,可以选择较小的batch_size以提高模型的优化程度。此外,还可以根据实验和经验进行调优,选择适合的batch_size来达到较好的训练效果。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [#深入探究# Tensorflow 中 batch_size 的设置问题](https://blog.csdn.net/lch551218/article/details/112259239)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [【目标检测】epoch、batchbatch_size理解](https://download.csdn.net/download/weixin_38516270/14885023)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值