关于epoch、batch_size、iteration,一直以来都有点难理解,特别是关于epoch和iteration这个概念,在多次看了多个博客的过程中,我个人认为转载的这个更容易理解
深度学习框架包含很多参数,如果不了解一些基本参数,我想去看哪个深度学习框架都很难。 “了解基本概念有助于加深对深度学习知识的理解,也是必然要掌握的。” 以下是初学者经常听到的几个参数。
1、batch深度学习优化算法简单地说是梯度下降。 每次参数更新有两种方法。
第一,循环所有数据(样品集中的所有数据)计算一次损失函数,然后计算各参数的函数斜率,更新斜率。 此方法的***缺点***是每次更新参数时都要查看数据集中的所有样本。 计算量开销大,计算速度慢,不支持在线学习。 这称为Batch gradient descent,这会降低批梯度。
另一种是每次看到一个数据就计算损失函数,求出梯度更新参数。 这被称为随机梯度下降、静态梯度设计。 这种方法比较快,但***缺点***收敛性能不太好,可能在最优点的附近晃悠。 hit是最没有优势的。 两次参数的更新也相互抵消,目标函数的振动可能会变得激烈。
为了克服两种方法的缺点,目前普遍采用折中手段。 最小梯度,小批量梯度下降。 该方法将数据分成若干批次,逐批次更新参数。 这样,一批中的一组数据共同确定了此次坡度的方向,下降后不易偏移,减少了随机性。 另一方面,批量的样本数与整个数据集相比非常小,所以计算量也不是很多。
这就是为什么batch_size经常出现在深度学习框架函数中的原因,因为目前的坡度降基本上是基于mini-batch。
有关将培训示例转换为batch_size格式的信息,请参阅准备培训示例的batch_size数据。
2、每次迭代(iterations iterations )也更新权重,每次更新权重时,都需要对batch_size个数据进行Forward运算以获得丢失函数,并以BP算法来更新参数。 一个iteration等于使用batchsize个样本训练一次。
3、epochs epochs定义为所有批次(所有样品)向前和向后传播1次的1次训练迭代。 这意味着一个周期是整个输入数据的一次前进和后退。 简单来说,epochs是指在训练中数据被“回合”了多少次。
举一个例子
训练集有1000个样本,batchsize=10,那么:
要训练整个样本集,请执行以下操作:
100次iteration,1次epoch。
具体计算公式如下
one epoch=numbersofiterations=n=训练样本数/batch_size
注:
在LSTM中也会遇到seq_length,其实
batch _ size=num _ steps * seq _ length