转:深度学习中epoch、batch、batch size和iterations详解
1.epoch
在训练一个模型时所用到的全部数据;
备注:一般在训练时都要使用多于一个的epoch,因为在神经网络中传递完整的数据集仅仅一次是不够的,只有将完整的数据集在同样的神经网络中传递多次,才会得到比较优秀的训练效果,当然也不行,容易过拟合,所以要根据实验选择自己最合适的。
epochs:
epochs被定义为向前和向后传播中所有批次的单次训练迭代。这意味着一个周期是整个数据的单次向前和向后传递。简单说,epochs指的就是训练过程中数据将被“轮”多少次,就这样。
2.batch
Keras中参数更新是按批进行的,就是小批的梯度下降算法。如果准备跑模型的数据量太大,此时自己的电脑可能承受不住,所以可以适当的将数据分成几块,就是分成几个batch。每次的参数更新有两种方式:
第一种,遍历全部数据集算一次损失函数,然后算函数对各个参数的梯度,更新梯度。这种方法每更新一次参数都要把数据集里的所有样本都看一遍,计算量开销大,计算速度慢,不支持在线学习,这称为批梯度下降。
另一种,每看一次数据就算一下损失函数,然后求梯度更新参数,这个称为随机梯度下降,这个方法速度比较快,但是瘦脸性能不太好,可能在最优点附近晃来晃去,找不到最优点。两次参数的更新也有可能互相抵消掉,造成目标函数震荡的比较剧烈。
3.batch size
一个batch中的数据量大小即为batch size,一般为2n,比如32,64,128等等。
4.iterations
iterations(迭代):每一次迭代都是一次权重更新,每一次权重更新需要batch_size个数据进行Forward运算得到损失函数,在BP算法更新参数。1个iteration等于使用batchsize个样本训练一次。
迭代,即batch size需要完成一次epoch的次数
(ps:其实对于一个epoch来说,batch和iterations数值上是相等的)
以下为上述知识的两个问题:
问题一:比如现在我们有一个2000大小的训练样本,然后我们将这2000个样本分成4个大小为500的小数据集样本,此时epoch=1(暂且就用这个样本训练1次)。
请问以下数值分别为多少:①batch;②batch size;③iterations;
问题二:Fashion Mnist数据集有70000个灰度图像,其中60000张图片作为训练数据,10000张图片作为测试数据。假设现在选择Batch Size=100对模型进行训练。迭代30000次。
每个Epoch要训练的图片数量:60000(训练集上的所有图像)
请问:①训练集具有的Batch个数;②每个Epoch需要完成的Batch个数;③每个Epoch具有的Iteration个数;④每个Epoch中发生模型权重更新的次数;⑤训练10个Epoch后,模型权重更新的次数;
答案公布于评论区。
总结:
1)不同Epoch的训练,其实用的是同一个训练集的数据。
2)第1个Epoch和第10个Epoch虽然用的都是训练集的60000张图片,但是对模型的权重更新值确是完全不同的。
3)因为不同Epoch的模型处于代价函数空间上的不同位置,模型的训练迭代越靠后,越接近低谷,其代价越小。
4)总共完成30000次迭代,相当于完成了30000/600=50个Epoch。
原文链接:https://blog.csdn.net/weixin_41529012/article/details/116293963
本文来自博客园,作者:河北大学-徐小波,转载请注明原文链接:https://www.cnblogs.com/xuxiaobo/p/17210396.html