根据自己的深度学习经历写一下:batch size、iterations、epochs
深度学习算法训练是迭代的,在训练时会多次使用模型获取结果,以期得到最优化的结果。
1.batch size
batch_size:每次训练所选取的样本数,通俗点讲就是一个 batch中的样本总数,一次输入进网络的样本数,一般设置为2的倍数(2,4,8,16,32,64,128,......)
注意,由于Batch Normalization层的存在,batch_size一般设置为2的倍数,并且不能为1。
2.iteration
iteration:训练完全部数据需要迭代的次数,通俗点讲一个iteration就是使用batch_size个样本把网络训练一次,iteration就是整个数据集被划分成的批次数目,数值上等于dataset / batch_size
全部的样本数据(dataset),按照batch_size进行切片,划分成iterations块。每个iteration训练结束后都会更新一次模型的参数,每一次迭代得到的结果都会被作为下一次迭代的初始值
一个iteration = 一个batch_size的数据进行一次forward propagation和一次backward propagation
3.epoch
epoch:前向传播和反向传播过程中所有批次的训练迭代次数,一个epoch就是整个数据集(dataset)的一次前向传播和反向传播,通俗点讲,epoch指的就是训练过程中全部数据将被送入网络训练多少次
整个数据集(dataset)在模型中传递一次是不够的,数据集是有限的,需要将整个数据集在同样的模型中传递多次,对模型参数更新多次,这样才有可能得到最优化的结果
如果epoch太小,网络有可能发生欠拟合;如果epoch太大,则有可能发生过拟合。具体怎么选择要根据实验结果去判断和选择,对于不同数据集选取的epoch是不一样的
4.举例
假设有1600个训练样本,batch_size设置为16,epoch设置为100,那么每一个epoch(轮数)就会训练1600 / 16 = 10 个 iteration,全部训练样本(1600)会被这样训练100个轮次,那么一共会有100 * 10 = 1000 个iteration,发生1000次钱箱传播和反向传播。
总结:
batch使用训练集中的一小部分样本对模型权重进行一次反向传播的参数更新,这一小部分样本被称为“一批数据”
iteration是使用一个batch数据对模型进行一次参数更新的过程,被称为“一次训练”
epoch使用训练集的全部数据对模型进行一次完整训练,被称为“一代(轮)训练”