转自:https://blog.csdn.net/tracylining/article/details/80781937
https://blog.csdn.net/qq_34886403/article/details/82558399
1)Batch Size(批尺寸):一次训练所选取的样本数。
Batch Size的大小影响模型的优化程度和速度,同时其直接影响到GPU内存的使用情况。假如你GPU内存不大,该数值最好设置小一点。
为什么要提出Batch Size?
在没有使用Batch Size之前,这意味着网络在训练时,是一次把所有的数据(整个数据库)输入网络中,然后计算它们的梯度进行反向传播,由于在计算梯度时使用了整个数据库,所以计算得到的梯度方向更为准确。但在这情况下,计算得到不同梯度值差别巨大,难以使用一个全局的学习率,所以这时一般使用Rprop这种基于梯度符号的训练算法,单独进行梯度更新。
在小样本数的数据库中,不使用Batch Size是可行的,而且效果也很好。但是一旦是大型的数据库,一次性把所有数据输进网络,肯定会引起内存的爆炸。
Batch Size设置合适时的优点:
A、通过并行化提高内存的利用率。就是尽量让你的GPU满载运行,提高训练速度;
B、单个epoch的迭代次数减少了,参数的调整也慢了,假如要达到相同的识别精度,需要更多的epoch;
C、适当Batch Size使得梯度下降方向更加准确。
Batch Size从小到大的变化对网络影响
A、没有Batch Size,梯度准确,只适用于小样本数据库;
B、Batch Size=1,梯度变来变去,非常不准确,网络很难收敛;
C、Batch Size增大,梯度变准确;
D、Batch Size增大,梯度已经非常准确,再增加Batch Size也没有用。
2)Epoch(回合):代表样本集内所有的数据经过了一次训练。
3)Iteration(迭代):迭代是 batch 需要完成一个 epoch 的次数。记住:在一个 epoch 中,batch 数和迭代数是相等的。
比如对于一个有 2000 个训练样本的数据集。将 2000 个样本分成大小为 500 的 batch,那么完成一个 epoch 需要 4 个 iteration。
例:
CIFAR10 数据集有 50000 张训练图片,10000 张测试图片。现在选择 Batch Size = 256 对模型进行训练,则
每个 Epoch 要训练的图片数量: 50000
训练集具有的 Batch 个数: 50000/256=195.3=196
每个 Epoch 需要完成的 Batch 个数: 196
每个 Epoch 具有的 Iteration 个数: 196
每个 Epoch 中发生模型权重更新的次数: 196
训练 10 代后,模型权重更新的次数: 196*10=1960
注:不同代的训练,其实用的是同一个训练集的数据。第 1 代和第 10 代虽然用的都是训练集的五万张图片,但是对模型的权重更新值却是完全不同的。因为不同代的模型处于代价函数空间上的不同位置,模型的训练代越靠后,越接近谷底,其代价越小。