opencart网站建设,下载建设银行官方网站下载安装,wap游戏中心,建网站要训练网络之前有很多参数要设置#xff0c;不了解各个参数的含义就没法合理地设置参数值#xff0c;训练效果也会因此大受影响。本篇博客记录一下网络训练里的Batch Size、Iterations和Epochs怎么理解。
一、引言
首先要了解一下为什么会出现Batch Size这个概念。深度学习算…训练网络之前有很多参数要设置不了解各个参数的含义就没法合理地设置参数值训练效果也会因此大受影响。本篇博客记录一下网络训练里的Batch Size、Iterations和Epochs怎么理解。
一、引言
首先要了解一下为什么会出现Batch Size这个概念。深度学习算法是迭代的也就是会多次使用算法获取结果以得到最优化的结果。每次迭代更新网络参数有两种方式也是两种极端
第一种是Batch Gradient Descent批梯度下降即把所有数据一次性输入进网络把数据集里的所有样本都看一遍然后计算一次损失函数并更新参数。这种方式计算量开销很大速度也很慢不支持在线学习。
第二种是Stochastic Gradient Descent随机梯度下降即把每次只把一个数据输入进网络每看一个数据就算一下损失函数并更新参数。这种方式虽然速度比较快但是收敛性能不好可能会在最优点附近震荡两次参数的更新也有可能互相抵消掉。
可见这两种方式都有问题所以现在一般都是采用两种方式的折衷Mini-Batch Gradient Decent小批梯度下降。就是把数据进行切片划分为若干个批按批来更新参数。这样一个批中的一组数据共同决定了本次梯度的方向下降起来就不容易跑偏减少了随机性。并且由于批的样本数与整个数据集相比小了很多计算量也不是很大。
二、Batch Size
所谓的batch_size就是每次训练所选取的样本数通俗点讲就是一个 batch中的样本总数一次喂进网络的样本数。batch_size的选择会影响梯度下降的方向。
在合理范围内增大batch_size有以下几个好处
内存利用率高大矩阵乘法的并行化效率提高跑完全部数据所需的迭代次数少对于相同数据量的处理速度可以进一步加快在一定范围内一般来说batch_size越大其确定的下降方向越准引起的训练震荡越小。
但也不能盲目增大否则会有以下几个坏处
内存容量可能撑不住报错RuntimeErrorCUDA out of memory跑完全部数据集所需的迭代次数减少要想达到相同的精度其所花费的时间大大增加了从而对参数的修正也就显得更加缓慢当batch_size增大到一定程度时其确定的下降方向已经基本不再变化了。
三、Iterations
所谓的iterations就是训练完全部数据需要迭代的次数通俗点讲一个iteration就是使用batch_size个样本把网络训练一次iterations就是整个数据集被划分成的批次数目数值上等于data_size/batch_size。
把全部的样本数据按照batch_size进行切片划分成iterations块。每个iteration结束后都会更新一次网络结构的参数每一次迭代得到的结果都会被作为下一次迭代的初始值。
一个iteration一个batch_size的数据进行一次forward propagation和一次backward propagation。
四、Epochs
所谓的epochs就是前向传播和反向传播过程中所有批次的训练迭代次数一个epoch就是整个数据集的一次前向传播和反向传播通俗点讲epochs指的就是训练过程中全部数据将被送入网络训练多少次。
为什么要使用多个epoch进行训练呢因为在神经网络中传递完整的数据集一次是不够的我们需要将完整的数据集在同样的神经网络中传递多次。我们使用的是有限的数据集仅仅更新权重一次或者说使用一个epoch是不够的。
如果epochs太小网络有可能发生欠拟合如果epochs太大则有可能发生过拟合。具体怎么选择要根据实验结果去判断和选择对于不同数据集选取的epochs是不一样的。
五、举个例子
假设有1024个训练样本batch_size8epochs10那么每个epoch会训练1024/8128个iteration全部1024个训练样本会被这样训练10次所以一共会有1280个iteration发生1280次前向传播和反向传播。注意由于Batch Normalization层的存在batch_size一般设置为2的倍数并且不能为1。
总结一下
Batch使用训练集中的一小部分样本对模型权重进行一次反向传播的参数更新这一小部分样本被称为“一批数据”Iteration是使用一个Batch数据对模型进行一次参数更新的过程被称为“一次训练”Epoch使用训练集的全部数据对模型进行一次完整训练被称为“一代训练”。