深度学习之 epoch batch iteration

Posted qianbo_insist

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了深度学习之 epoch batch iteration相关的知识,希望对你有一定的参考价值。

知识点

无论是使用yolo3,4 都是一样的过程,例如使用yolo3 去训练的时候,使用参数tran来训练,darknet的好处是可以使用opencv直接来进行模型推理,但是在训练过程中,我们经常会遇到以下这些单词,
1 Epoch
2 Average Loss
3 梯度下降
4 Batch
5 Iteration

这些意味着什么呢,神经网络包含输入输出,输入意味着提供数据,输出一般为结果、分类。我们使用yolo来做例子,先看下面的数据文件。

kd.data

classes = 7
train = J:/AI/darknet-train/data/train.txt
valid = J:/AI/darknet-train/data/val.txt
names = J:/AI/darknet-train/data/KD.names
backup = J:/AI/darknet-train/data/backup/

解释:
7 分类,也就是输出可能是7种里面的一种,tran 代表训练数据,比如有10000张图片文件,valid为验证文件,比如有1000张待验证图片,names为分类文件,backup为数据权重文件结果存放地址。

kd.names

gcc
sgcd
sgr
snc
tc
jqsb
gccyq
看到以上不要被单词蒙了,这是自己起的名字,比如工程车简写成为gcc而已。也就是7类的名称,那接下来,怎么训练呢

以下命令开启训练

darknet.exe detector train data/kd.data yolov3.cfg darknet53.conv.74


我们接下来就会看到 一个是 avg loss ,iteration 还有batches,训练结束后还有如下图这些文件,这是训练结束权重文件,每次开启训练,都会接着上一次进行,我们会发现开启的一定是last文件,所以训练可以继续。

以上这几个文件,那分别都是什么呢,我们先来解释一下这些名词,带大家进入。

Epoch

一个完整的数据集通过了神经网络一次并且返回了一次,这个过程称为一次 Epoch,正向传播和反向传播都经历了,所有数据集识别和提取一次并反馈一次。

batch

整个训练样本分成多个批次,叫Batch,
batch_size 是每个批次的大小,

iteration

训练一个batch就是一次迭代完成,也就是一个iteration,这和我们使用语言比如std c++的标准容器迭代器的意义类似,但是只是一个批次的。也就是完成每个Epoch是需要多次迭代的。

完成Epoch训练以后其实留下来的权重文件并不一定就能适合,权重的更新次数越多,也就意味着精度提高,当然,并非一定是越多越好,到了一个极限就不会上升了,这时应该停止训练。1000,2000,3000 也就是训练的更新次数,last意味着最后一次更新结果。那么 1000,2000,3000这个数字哪里来的?

数据集有10000张图片,如果batch_size = 100, batch = 10000/100 = 100

每次Epoch 完成,Batch 个数 = 100 ,那也就是迭代次数为100。 权重更新次数为100, 10个Epoch后,是不是权重更新次数为 100*10 = 1000,这个 yolo3_1000.weights 就是这么来的,那么 yolo3_2000 说明经过了几次Epoch,是的,20次,注意这里和我们的图片数量和batch_size相关的,千万不要搞混了。

average loss

使用梯度下降对数据集算法进行训练,都要计算他的损失,每次Epoch完成,就会计算一次损失,是loss的和 (sum) 除以batch的次数,loss / batch ,也就是每批训练的平均损失

理解了吗? 下次再聊

以上是关于深度学习之 epoch batch iteration的主要内容,如果未能解决你的问题,请参考以下文章

深度学习之 TensorFlow模型优化和调优实例

深度学习之Batch归一化

深度学习之Batch Normalization

深度学习之Batch Normalization

python深度学习之语音识别(CPU vs GPU)

深度学习之 BN(Batch Normalization)批归一化