batch_size设置时必须要知道的几点内容:
- 不同的神经网络对batch_size的敏感程度不同,卷积神经网络更适合较大的batch_size,循环神经网络更适合较小的batch_size
- 如果数据集较大,可以设置较大的batch_size,以充分利用GPU的计算资源(但要保证内存够用,batch_size越大越吃内存)
- batch数太小,而类别又比较多的时候,可能会导致损失函数震荡而不收敛,尤其是在网络比较复杂的时候
- 随着Batch Size的增大,虽然处理相同数据量的速度更快,但达到相同精度所需的epoch数量也增加,因此存在一个Batch Size增大到某个程度后达到时间上的最优的矛盾,也就是说存在一个平衡点,在这个点上,批量大小既能保证较快的处理速度,又不会因为批量过大而导致需要过多的训练周期来达到所需的模型精度。
- 由于最终收敛精度会陷入不同的局部极值,因此BatchSize增大到某些时候,达到最终收敛精度上的最优
- 过大的batchsize的结果是网络很容易收敛到一些不好的局部最优点。同样太小的batch也存在一些问题,比如训练速度很慢,训练不容易收敛等
- Batch size范围和训练数据规模、神经网络层数、单元数都没有很明显的关系,却和收敛速度、随机梯度噪音、训练集的样本数目有关
- GPU对2的幂次的batch_size性能更优,设置为16、32、64、128比设置为整10、整00的倍数更好。在某些硬件上,使用特定大小的数组可以减少运行时间,尤其是在GPU上,通常使用2的幂次作为batch size的值