-
引言
- epochs : 当一个完整的数据集通过了神经网络一次并且返回了一次,这个过程称为一个 epoch
- batch :当一个 epoch 对于计算机而言太庞大的时候,就需要把它分成多个小块,每个块称为一个batch;在不能将数据一 次性通过神经网络的时候,就需要将数据集分成几个 batch
- batch size : 批大小,一个 batch 中的样本总数,和 number of batches 是不同的
- iterations : 是 batch 需要完成一个 epoch 的次数。在一个 epoch 中,batch 数和迭代数是相等的
- iterations = epochs×(images / batch_size)
需要有 Batch_Size原因 :
batchsize 的正确选择是为了在内存效率和内存容量之间寻找最佳平衡
使用多个 epoch 原因:
在神经网络中传递完整的数据集一次是不够的,需要将完整的数据集在同样的神经网络中传递多次。因为我们使用的是有限的数据集,并且使用一个迭代过程即梯度下降,优化学习过程和图示
因此仅仅更新权重一次或者说使用一个 epoch 是不够的,随着 epoch 数量增加,神经网络中的权重的更新次数也增加,曲线从欠拟合变得过拟合,
-
示例
mnist 数据集有 60000 张图片作为训练数据,10000 张图片作为测试数据 Batch Size = 100
- 每个 Epoch 要训练的图片数量:60000(训练集上的所有图像)
- 训练集具有的 Batch 个数: 60000/100=600(无法整除,要加1,例:50000/256=195+1=196)
- 每个 Epoch 需要完成的 Batch 个数: 600
- 每个 Epoch 具有的 Iteration 个数: 600(完成一个Batch,相当于参数迭代一次)
- 每个 Epoch 中发生模型权重更新的次数:600
- 训练 10 个Epoch后,模型权重更新的次数: 600*10=6000
- 总共完成30000次迭代,相当于完成了 30000/600=50 个Epoch
不同Epoch的训练,其实用的是同一个训练集的数据。第1个Epoch和第10个Epoch虽然用的都是训练集的60000图片,但是对模型的权重更新值却是完全不同的。因为不同Epoch的模型处于代价函数空间上的不同位置,模型的训练代越靠后,越接近谷底,其代价越小