[英]What is causing large jumps in training accuracy and loss between epochs?
在 python 中的 Tensorflow 2.0 中訓練神經網絡時,我注意到訓練精度和損失在不同時期之間發生了顯着變化。 我知道打印的指標是整個 epoch 的平均值,但是在每個 epoch 之后,准確性似乎都會顯着下降,盡管平均值總是在增加。
損失也表現出這種行為,每個時期顯着下降,但平均值增加。 這是我的意思的圖像(來自 Tensorboard):
我在我自己實現的所有模型上都注意到了這種行為,所以這可能是一個錯誤,但我想就這是否是正常行為以及如果是什么意思有第二意見?
此外,我正在使用一個相當大的數據集(大約 300 萬個示例)。 批次大小為 32,准確率/損失圖中的每個點代表 50 個批次(圖表上的 2k = 100k 個批次)。 批次的學習率圖是 1:1。
我剛剛在做一個關於 object 本地化的項目時遇到了這種問題。 就我而言,有三個主要候選人。
我在訓練中沒有使用洗牌。 這會在每個 epoch 之后造成損失增加。
我定義了一個使用 IOU 計算的新損失 function。 有點像;
def new_loss(y_true, y_pred): mse = tf.losses.mean_squared_error(y_true, y_pred) iou = calculate_iou(y_true, y_pred) return mse + (1 - iou)
我還懷疑這種損失可能是紀元后損失增加的一個可能的候選者。 但是,我無法更換它。
我正在使用Adam優化器。 所以,一個可能的做法是改變它,看看訓練是如何受到影響的。
我剛剛將Adam更改為SGD ,並在訓練中對我的數據進行了洗牌。 損失仍然有一個跳躍,但與沒有變化的情況相比,它是如此之小。 例如,我的損失峰值在更改前是 ~0.3,現在變成了 ~0.02。
筆記
我需要補充一下,關於這個話題有很多討論。 我嘗試為我的 model 使用可能的候選解決方案。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.