2017-05-08 294 views
1

在培訓深度學習網絡時(例如使用TensorFlow或類似方法),通常需要對固定樣本集進行訓練,並希望通過較長時間的訓練可以獲得更好的結果。但是,這假定單調遞增的準確性,如下所示,顯然不是真實的。如下所示,停在「2.0」的時候會有10個百分點更高的準確性。有沒有通用的程序來選擇更好的模型並保存它們。 換句話說,一個峯值檢測程序。也許,在整個訓練過程中跟蹤測試精度,並在精度高於以前的值時節省模型(檢查點?)。
問題:Tensorflow:從培訓課程中選擇最佳模型

  1. 什麼是挑選最佳模型的最佳做法?
  2. TF有沒有辦法呢?
  3. 根據優化器最終會找到更好的解決方案的理論,繼續培訓更長時間(也許更長)是否有優點?
  4. 檢查點是最佳的保存方法嗎?

謝謝。 Original graph

編輯:由於從@Wontonimo的建議,改善的準確度的結果如下所示。以下改變:

  • 減少在從0.003亞當優化學習率至0.001
  • 從完整的數據集添加兩個附加漏失層(概率= 0.5)
  • 洗牌選擇訓練幀(而不是序列選擇)
  • 將訓練迭代次數增加50%。

有了這些改變,似乎繼續進一步培訓將是有利的。並可能添加更多正則化。

New training graph

回答

1

這凸顯了在機器學習

  • 1 2個常見問題:學習速率不穩定
  • 2:過於樂觀

學習速率不穩定 首先讓我們來談談學習速度不穩定。你的圖表的錯誤率突然出現改善,就好像神經網絡看到了一些使其以前的經驗無效的數據,它對爆發的問題有了充分的瞭解。如果我們考慮培養一個動物或一個人,如果我們讓下一個培訓班的結果變得太重要而不是長遠看待,就會發生這種情況。業內人士談論學習速度衰退,這與「一旦你有基本的瞭解,對你的心智模式做出微小的改變」類似。

具體來說,考慮降低你的學習率1/2或1/3。另外嘗試使用更強大的學習算法。如果您正在使用梯度下降,則嘗試使用基於動量的梯度下降。最後,如果你看到這些大幅下降的測試精度,再次降低你的學習速度1/2或1/3。如果你在最後一層沒有使用像正常人那樣的正規化者,那也可以幫助你保持訓練結果與你的測試結果密切相關,這樣你就不會過度訓練。

過分樂觀 您提到過,如果您有良好的結果,您想停止培訓。你忽略了你的模型實際上並沒有收斂。忽略不良結果對模型過於樂觀。

我認爲你的模型顯示出巨大的承諾,如果它能夠達到0.8。像monumentum和輟學等小變化將穩定您的結果。

更新時間:Minibatch 後您的舊圖形和新的圖形多審查,並考慮到的意見,看來,你可以降低噪音大大通過使用更大的minibatch。考慮將您的批量增加x10。您的圖表看起來很像SGD,或者批量大小足夠小,以獲得類似的結果。在發送給亞當以獲得收益之前,將批次結果的損失函數平均化很重要。如果你這樣做,你可能不得不跑到10倍的時代,但你會看到更平滑的圖。

+0

謝謝你的評論。在我們的例子中,我們使用了Adam優化器,我相信它會自動實現學習速率衰減。但顯然這還不夠。關於正規化,我們正在使用一個輟學層,但您的意見表明第二個不會是一件壞事。 – Hephaestus

+0

但是,原始問題似乎仍然有用。我應該推斷一個設計良好的訓練系統是單調的,不需要峯值檢測? – Hephaestus

+0

我會說是的,一個設計良好的系統**趨向於單調行爲。但是,無需在不必要的工作上刻錄CPU,因此檢測到高原的某些內容對退出和排列下一份工作很有用。 – Wontonimo

0

我認爲在這種情況下,最好是從不同的角度可能選擇另一種模式解決這個問題。對我來說,這個精度圖看起來非常嘈雜,真的是隨機的。