深度学习之 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的主要内容,如果未能解决你的问题,请参考以下文章