深度学习中涉及到很多参数,下面主要介绍以下几个参数:
batch_size
要说batch_size,就不得不提深度学习的优化算法之一---梯度下降。梯度下降大致可以分为以下三种:批量梯度下降算法(BGD,Batch gradient descent algorithm)
随机梯度下降算法(SGD,Stochastic gradient descent algorithm)
小批量梯度下降算法(MBGD,Mini-batch gradient descent algorithm)
批量梯度下降算法:每一次计算都需要遍历全部数据集,然后更新梯度,所以每一次计算的开销大,并且花费时间长。
随机梯度下降算法:每次随机选取一条数据,然后求梯度更新参数,这种方法计算速度快,但是收敛性能不太好,可能在最优点附近来回摆动,很难找到最优点。每次随机选取的一个数据去更新梯度,也可能互相抵消掉,造成目标函数震荡的比较剧烈。
为了克服两种方法的缺点,现在一般采用的是一种折中手段---小批量梯度下降算法。这种方法把训练数据集分为若干个批,用每批量来更新参数,这样,一个批中的一组数据共同决定了本次梯度的方向,下降起来就不容易跑偏,减少了随机性。另一方面小批量选取的样本数与整个数据集相比小了很多,所以计算量也不是很大。
tf框架中batchsize指的就是更新梯度中使用的样本数量。当然这里如果把batch_size设置为训练数据集的长度,就成了批量梯度下降算法,batch_size设置为1就是随机梯度下降算法。
iterations
迭代次数,每一次迭代都会更新一次网络结构的参数。
迭代是重复反馈的动作,神经网络中我们希望通过迭代进行多次的训练来训练模型,从而达到所需的目标或结果。
每一次迭代得到的结果都会被作为下一次迭代的初始值。
一个迭代 =一个(batchsize)数据正向通过(forward)+ 一个(batch_size)数据反向(backward)
前向传播:构建由(x1,x2,x3)得到输出hwb(x)的表达式
反向传播:基于给定的损失函数,求解参数的过程
epochs
epochs指的就是训练过程中训练数据集合将被“轮”多少次。每一“轮”是全部数据都被使用过一次(全部使用不是必须的)。
例如在某次模型训练过程中,总的样本数是100000,batch_size=512,epochs=2,其对应的伪代码如下:
data =
batch_size = 512
for i in range(epochs):
for j in range(int(data_length / batch_size - 1)):
x_data = data[begin:end, ]
y_data = data[begin:end, ]
mode.train(x_data, y_data)
begin += batch_size
end += batch_size
其中iterations = data_length / batchsize