深度学习中涉及到很多参数,如果对于一些参数不了解,那么去看任何一个框架都会有难度,在TensorFlow中有一些模型训练的基本参数,这些参数是训练模型的前提,也在一定程度上影响着模型的最终效果。下面主要介绍几个参数。

  • batch_size
  • iterations
  • epochs

batch_size

深度学习的优化算法,其实就是梯度下降,在之前的文章中我们也介绍过梯度下降,这里就不详细说明。梯度下降分为三种:

  • 批量梯度下降算法(BGD,Batch gradient descent algorithm)
  • 随机梯度下降算法(SGD,Stochastic gradient descent algorithm)
  • 小批量梯度下降算法(MBGD,Mini-batch gradient descent algorithm)

批量梯度下降算法,每一次计算都需要遍历全部数据集,更新梯度,计算开销大,花费时间长,不支持在线学习。

随机梯度下降算法,每次随机选取一条数据,求梯度更新参数,这种方法计算速度快,但是收敛性能不太好,可能在最优点附近晃来晃去,hit不到最优点。两次参数的更新也有可能互相抵消掉,造成目标函数震荡的比较剧烈。

为了克服两种方法的缺点,现在一般采用的是一种折中手段,mini-batch gradient decent,小批的梯度下降,这种方法把数据分为若干个批,按批来更新参数,这样,一个批中的一组数据共同决定了本次梯度的方向,下降起来就不容易跑偏,减少了随机性。另一方面因为批的样本数与整个数据集相比小了很多,计算量也不是很大。

tf框架中的batch_size指的就是更新梯度中使用的样本数。当然这里如果把batch_size设置为数据集的长度,就成了批量梯度下降算法,batch_size设置为1就是随机梯度下降算法。

iterations

迭代次数,每次迭代更新一次网络结构的参数。

迭代是重复反馈的动作,神经网络中我们希望通过迭代进行多次的训练以到达所需的目标或结果。

每一次迭代得到的结果都会被作为下一次迭代的初始值。

一个迭代 = 一个(batch_size)数据正向通过(forward)+ 一个(batch_size)数据反向(backward)

神经网络

前向传播:构建由(x1,x2,x3)得到Y(hwb(x))的表达式

反向传播:基于给定的损失函数,求解参数的过程

epochs

epochs被定义为前向和反向传播中所有批次的单次训练迭代。这意味着1个周期是整个输入数据的单次前向和反向传递。

简单说,epochs指的就是训练过程中数据将被“轮”多少次

例如在某次模型训练过程中,总的样本数是10000,batch_size=100,epochs=10,其对应的伪代码如下:

1
2
3
4
5
6
7
8
9
data = 
batch_size = 100
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 / batch_size


打开微信扫一扫,关注微信公众号【搜索与推荐Wiki】