Dataloader 就是一个迭代器,最基本的使用就是传入一个 Dataset 对象,它就会根据参数 batch_size 的值生成一个 batch 的数据。
batch_size:1次迭代所使用的样本量
pytorch 训练模型时调用数据不是一行一行进行的(这样太没效率),而是 一捆一捆的,这里定义每次输入神经网络多少行数据
要说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就是随机梯度下降算法
iteration
迭代次数,每一次迭代都会更新一次网络结构的参数
迭代是重复反馈的动作,神经网络中我们希望通过迭代进行多次的训练来训练模型,从而达到所需的目标或结果。
每一次迭代得到的结果都会被作为下一次迭代的初始值。
一个迭代 = 一个(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