回覆列表
-
1 # 你看我獨角獸嗎
-
2 # AI河馬
神經網路的除錯不同於程式的除錯
因為它的錯誤型別不會是執行錯誤
很多時候的錯誤是網路難以收斂
但是對於經驗豐富的人來說,這反而更好處理,不需要一行一行檢視程式碼。
比如說很早就出現了NAN,這個時候的問題在於我們的學習率過高,將當前學習率調至三分之一重新訓練,如果不行,繼續調小。
或者遇到網路不再學習的問題。這個時候可能出現了過擬合,我們需要減少樣本數量,如果依舊過擬合,那就需要確認樣本和標籤是否對應。
調參作為訓練神經網路最重要也是最常見的一步。初始的權值很重要,稍微大一點的幅度會稍微好一些,但是太大又會引起NAN問題,所以得把握好尺度,還有就是在訓練結束之前嘗試減小學習率,看是否能對效果帶來提升。
總結一下
除錯神經網路總體而言要比常規程式花費的精力更多,因為它常常會因為各個方面的因素而使得網路的最終效果不好,所以需要慢慢摸索,慢慢熟悉,從而在出現問題的時候能知道是什麼導致的。
以上觀點若有不足,還請指教
謝邀。以下是一些經驗之談,深度學習在幾個方面都很棘手。數學和理論不僅可以快速導致梯度公式的毛球和更新方程,而且深度學習模型也很複雜。在TensorFlow開發了TensorBoard後,神經網路的線上視覺化和控制訓練獲得很大進展,幫助開發人員診斷不起作用的神經網路層。
從小步伐開始最先進的深度學習架構只會越做越大。作為試圖實現這些體系結構的程式設計師,如果您確切知道自己在做什麼,這不是問題。如果你的知識不夠完美,那麼事情就會出錯。無論是試圖複製別人的結果還是超越已經完成的成果。特別是,當您剛剛開始一個新的深度學習專案時,我發現了兩個特別有用的措施:使用虛假資料驗證您的資料模型,並在構建體系結構時逐步進行。
偽造你的資料,獲得已有的結果我的第一條建議主要出現在“按照我說的方式”類別中,是從最簡單的架構開始,並決定您對資料的表示。對於某些版本的問題,實施一個小型的完全連線的前饋網路(甚至只是邏輯迴歸)。建立一個模擬資料流,其具有與您透過網路推送的資料相同的形狀和維度。嘗試輸入和輸出之間的關係是確定性且易於學習的資料,以及輸入和輸出之間沒有關係的資料,並比較演算法的效能:
這些樣本如下所示。 您覺得哪些關係更容易學習?
這種方法我們稱之為單元測試。假資料可以對您最終實施的演算法的行為進行一些健全性檢查。
專注於一個模型當我們構建了一個九層RNN,參考實現在Torch中。我和我的同事最初開始在Theano,Keras中複製這種架構,我們的努力拖延了幾天甚至幾周。
在我自己的情況下,我最終意識到這是因為我同時更新了資料獲取和分類器的程式碼。 Theano是一回事,但是當它歸結為它時,Keras有相當簡單的模型規範習慣用法,所以從理論上說它應該很難混淆它。但是當我到達第一個模型層時,我不知不覺地引入了資料表示方式的細微變化。無論好壞,當你輸入一個尺寸與圖層所期望的尺寸不匹配的矩陣時,許多架構會變得非常混亂,從而產生如下有趣的錯誤訊息:
因此,如果您的資料模型可能已損壞,請回到單元測試並首先修復它。然後構建回到您正在實施的網路。無論如何,陣列大小是什麼......?
善用你的偵錯程式隨著你的神經網路慢慢成為冗雜的程式碼和越來越無聊的註釋出現時(#再試一次......),可能像TDB這樣的工具,TensorBoard,或者你自己的定製和視覺化系統將在實際的深度學習除錯中變得越來越有用:檢查漸變,調整學習速率,並解決“此輸出不是我想要或預期的”類別中的其他現象和有趣的東西。不然,訓練模型的調參階段是多麼令人沮喪,痛苦和漫長。
當然,正確的選擇總是要知道你在做什麼,永遠不要犯任何錯誤。這可能涉及在紙上繪製您的網路架構,在機器學習中做主人,而不是做調參工程師。。