2016-11-09 229 views
0

我正在嘗試通過微調VGG16網絡(預先在ImageNet上進行訓練)在一個相當小的數據集(11000張圖像,200個類別)上進行圖像分類來進行轉移學習。實際上我只是在修改VGG16網絡的最後3個FC層。我在3個FC層中的兩個上添加了丟失概率爲0.5的丟失。損失與驗證準確度之間的關係是什麼?

所以,當我在這個網絡上進行訓練時,除了用原作者給出的VGG_MEAN值減去圖像中的每個通道外,我沒有做任何奇特的預處理。

因此,事情是培訓似乎進行得很好,損失大幅下降並穩定在一定的價值附近,並且我正在監控網絡對驗證集(20%的數據)的預測準確性,具體數目爲批次已經過培訓。 我注意到平均驗證的準確性沒有顯示出任何改進的趨勢 - 並且平均驗證準確性在整個培訓過程中波動,當時我實際上希望它逐漸增加。在推斷時,我確保不要拖動驗證數據。

我試圖降低學習速度,微調較少的層次,但無濟於事。如果損失是代表模型是實際學習的代理人,那麼爲什麼驗證準確性的差異?

(1)這是因爲我只有很少的訓練數據開始? (2)最初的Imagenet數據集有1000個類,但是我的分類任務更加細化,並且具有原始數量的ImageNet類的1/5(考慮對鳥的種類或不同的靈長類進行分類)。這可能是一個問題嗎? 我想從一些有這方面問題的工作經驗的人員那裏得到一些意見和反饋。

+0

如果我理解的很好,你的損失函數正在減少,但你的驗證損失不再下降,這表明你正在過度適合你的訓練集。如果是這種情況,請嘗試懲罰您的參數以避免過度擬合。 – Feras

+0

向FC7和FC6層添加0.5的丟失不會改善任何事情。事實上,驗證的準確性很差,我只是難倒了。 – user1050648

回答

0

事實證明,我面臨着「細粒度」分類問題。鳥類的圖像看起來非常相似,這給網絡學習帶來了問題。

+0

嗨,所以,在您看來,調整少量類並不是一個好主意。我也正在調整VGG16 50種布料。而且我看到損失不會下降,它只是在5000-4000平均7000-4000之間波動。我還沒有運行任何驗證。 – Rusty

+0

@Rusty,不完全......我的意思是在我的情況下,分類問題太細膩 - 來自不同類的圖像看起來彼此非常相似。例如,區分樹木和汽車比較難以區分兩種樹木,例如.. – user1050648

+0

沒問題。那麼損失是否具有任何意義,使得它總是小於某個值等,或者我應該只依賴驗證的準確性? – Rusty

0

我知道(訓練)損失的價值與訓練準確性有很強的關係。如果訓練時損失減少,訓練的準確性會提高。但列車損失與驗證準確性之間沒有很強的關係。如果火車損失正在減少,驗證準確性在增加,那麼這就是我們所期望的。但是,如果列車損失正在減少,而驗證準確度降至飽和,則可能會發生過度擬合。在這種情況下,應該停止訓練並調整一些參數,例如正常化和輟學率的體重衰減。

所以驗證的準確性不能直接替換爲訓練損失。如果可能的話,應該使用驗證的準確性,而不是僅僅看到學習損失的曲線。以上是我的理解。

相關問題