天天看點

深度學習之 epoch batch iteration知識點Epochbatchiterationaverage loss

知識點

無論是使用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類的名稱,那接下來,怎麼訓練呢

以下指令開啟訓練

深度學習之 epoch batch iteration知識點Epochbatchiterationaverage loss
深度學習之 epoch batch iteration知識點Epochbatchiterationaverage loss

我們接下來就會看到 一個是 avg loss ,iteration 還有batches,訓練結束後還有如下圖這些檔案,這是訓練結束權重檔案,每次開啟訓練,都會接着上一次進行,我們會發現開啟的一定是last檔案,是以訓練可以繼續。

深度學習之 epoch batch iteration知識點Epochbatchiterationaverage loss

以上這幾個檔案,那分别都是什麼呢,我們先來解釋一下這些名詞,帶大家進入。

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 ,也就是每批訓練的平均損失

了解了嗎? 下次再聊

繼續閱讀