簡體   English   中英

是什么導致訓練准確率和 epoch 之間的損失大幅躍升?

[英]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 使用可能的候選解決方案。

這種現象似乎是因為 model 在准確度和損失方面具有較高的批次間差異。 如果我使用 model 的圖表來說明這一點,其中每一步的實際指標與整個時期的平均值相反:

在此處輸入圖像描述

在這里您可以看到 model 可以有很大的不同。 (此圖僅針對一個時期,但事實仍然存在)。

由於每個 epoch 都會報告平均指標,因此在下一個 epoch 開始時,平均指標很可能會低於之前的平均值,從而導致運行平均值急劇下降,如下圖紅色所示:

在此處輸入圖像描述

如果您將紅色圖中的不連續性想象為紀元轉換,您就會明白為什么會在問題中觀察到這種現象。

TL;DR model 的 output 相對於每個批次具有非常高的差異。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM