知識點
無論是使用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類的名稱,那接下來,怎麼訓練呢
以下指令開啟訓練
我們接下來就會看到 一個是 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 ,也就是每批訓練的平均損失
了解了嗎? 下次再聊