训练模型时每次训练的样本大小和样本的批数对训练的时间和效率有很大的影响。
根据训练的数据个数不同,分为以下三种形式
- 批量梯度下降法BGD(Batch Gradient Descent):
Batch中文意思是一批,一组;指的是针对所有的数据来计算梯度
#全部样本大小Batch
for epoch in range(examples_size):
#举例 如共10000个样本
for epoch in range(10000):
优点:可以最大化的利用向量化计算的优势,来提升计算速度;是全局最优解
缺点:样本数多时,计算机速度慢,性能差
- 随机梯度下降SGD(stochastic gradient descent)
每个样本都计算一下损失函数,然后求梯度更新参数。
优点:具有比较好的随机性,可以帮助我们跨越”鞍点“”问题
缺点:训练时间过长,收敛性不佳
鞍点
在二维数轴中,要求一条曲线的最值,通常求这条曲线导数为0的点;
但是在三维坐标,高维坐标中,存在一个点在一个方向上是最大值,在另一个方向是最小值,这样的点就是鞍点;形象地认为是马鞍中央的点
- 小批量梯度下降法MBGD(mini-batch Gradient Descent)
以上两种方法的折中,将全部的样本按照合适的大小(batch-size)分成多组(Iterations)
#mini-Batch
for epoch in range(training_epochs):
for i in range(total_batch):
区分Epoch,Batch-Size,Iterations
Epoch:训练周期,所有训练样本的一次前馈和反馈的过程。在实际训练过程中,由于训练样本的个数太大,因此经常将一个Epoch分成多个Batch,每个Batch训练一小部分的数据。
Batch-Size:一次前馈和反馈的训练样本数量
Iterations:迭代次数,即完成一次Epoch所需要的Batch个数,也可理解成内存嵌套的循环次数
看了很多的文章,都是给了概念,但是不是很清晰,不如给个例子
一共有10000个样本,则完成1次epoch需要将10000个样本数据都运行一遍,如果1个batch的大小是10,那就需要10000/10=1000个iterations,也就是1000个batch,用代码表示就是
#举例:一共10000个样本,batch-size=10,则Iterations=10000/10=1000
for epoch in range(5):#这个5表示将所有的样本训练5次,与batch_size,iterations无关
for i in range(1000):#一共有1000个batch
作者当初不懂的点就在于将epoch的循环次数当成batch_size,以为外层循环次数*内层循环次数需要等于样本个数,其实不是这样的,外层的epoch循环次数与batch_size,batch_numbers,iterations是无关的。
一般epoch的大小就是靠经验先蒙一个,运行看结果,当loss基本不变时,确定大概的epoch个数
文章出处登录后可见!