日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 人工智能 > pytorch >内容正文

pytorch

深度学习网络调试技巧

發(fā)布時間:2025/3/16 pytorch 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 深度学习网络调试技巧 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

https://zhuanlan.zhihu.com/p/20792837

轉(zhuǎn)載請注明:煉丹實驗室

神經(jīng)網(wǎng)絡(luò)的代碼,比一般的代碼要難調(diào)試不少,和編譯錯誤以及運行時程序崩潰相比,神經(jīng)網(wǎng)絡(luò)比較棘手的地方,往往在于程序運行正常,但是結(jié)果無法收斂,這個檢查起來可要麻煩多了。下面是根據(jù)我平時調(diào)試神經(jīng)網(wǎng)絡(luò)的經(jīng)驗,總結(jié)的一些比較通用的調(diào)試技巧,后續(xù)會再寫一篇文章,專門介紹一下theano如何進行調(diào)試,希望能對大家調(diào)試神經(jīng)網(wǎng)絡(luò)有所幫助。

遇到Nan怎么辦?

Nan問題,我相信大部分人都遇到過,一般可能是下面幾個原因造成的:

  • 除0問題。這里實際上有兩種可能,一種是被除數(shù)的值是無窮大,即Nan,另一種就是除數(shù)的值是0。之前產(chǎn)生的Nan或者0,有可能會被傳遞下去,造成后面都是Nan。請先檢查一下神經(jīng)網(wǎng)絡(luò)中有可能會有除法的地方,例如softmax層,再認(rèn)真的檢查一下數(shù)據(jù)。我有一次幫別人調(diào)試代碼,甚至還遇到過,訓(xùn)練數(shù)據(jù)文件中,有些值就是Nan。。。這樣讀進來以后,開始訓(xùn)練,只要遇到Nan的數(shù)據(jù),后面也就Nan了??梢試L試加一些日志,把神經(jīng)網(wǎng)絡(luò)的中間結(jié)果輸出出來,看看哪一步開始出現(xiàn)Nan。后面會介紹Theano的處理辦法。
  • 梯度過大,造成更新后的值為Nan。特別是RNN,在序列比較長的時候,很容易出現(xiàn)梯度爆炸的問題。一般有以下幾個解決辦法。
  • 對梯度做clip(梯度裁剪),限制最大梯度,其實是value = sqrt(w1^2+w2^2….),如果value超過了閾值,就算一個衰減系系數(shù),讓value的值等于閾值: 5,10,15。
  • 減少學(xué)習(xí)率。初始學(xué)習(xí)率過大,也有可能造成這個問題。需要注意的是,即使使用adam之類的自適應(yīng)學(xué)習(xí)率算法進行訓(xùn)練,也有可能遇到學(xué)習(xí)率過大問題,而這類算法,一般也有一個學(xué)習(xí)率的超參,可以把這個參數(shù)改的小一些。
  • 初始參數(shù)值過大,也有可能出現(xiàn)Nan問題。輸入和輸出的值,最好也做一下歸一化。具體方法可以參考我之前的一篇文章:深度學(xué)習(xí)個人煉丹心得 - 煉丹實驗室 - 知乎專欄
  • ?

    神經(jīng)網(wǎng)絡(luò)學(xué)不出東西怎么辦?

    可能我們并沒有遇到,或者解決了Nan等問題,網(wǎng)絡(luò)一直在正常的訓(xùn)練,但是cost降不下來,預(yù)測的時候,結(jié)果不正常。

  • 請打印出訓(xùn)練集的cost值和測試集上cost值的變化趨勢,正常情況應(yīng)該是訓(xùn)練集的cost值不斷下降,最后趨于平緩,或者小范圍震蕩,測試集的cost值先下降,然后開始震蕩或者慢慢上升。如果訓(xùn)練集cost值不下降,有可能是代碼有bug,有可能是數(shù)據(jù)有問題(本身有問題,數(shù)據(jù)處理有問題等等),有可能是超參(網(wǎng)絡(luò)大小,層數(shù),學(xué)習(xí)率等)設(shè)置的不合理。?
    請人工構(gòu)造10條數(shù)據(jù),用神經(jīng)網(wǎng)絡(luò)反復(fù)訓(xùn)練,看看cost是否下降,如果還不下降,那么可能網(wǎng)絡(luò)的代碼有bug,需要認(rèn)真檢查了。如果cost值下降,在這10條數(shù)據(jù)上做預(yù)測,看看結(jié)果是不是符合預(yù)期。那么很大可能網(wǎng)絡(luò)本身是正常的。那么可以試著檢查一下超參和數(shù)據(jù)是不是有問題。
  • 如果神經(jīng)網(wǎng)絡(luò)代碼,全部是自己實現(xiàn)的,那么強烈建議做梯度檢查。確保梯度計算沒有錯誤。
  • 先從最簡單的網(wǎng)絡(luò)開始實驗,不要僅僅看cost值,還要看一看神經(jīng)網(wǎng)絡(luò)的預(yù)測輸出是什么樣子,確保能跑出預(yù)期結(jié)果。例如做語言模型實驗的時候,先用一層RNN,如果一層RNN正常,再嘗試LSTM,再進一步嘗試多層LSTM。
  • 如果可能的話,可以輸入一條指定數(shù)據(jù),然后自己計算出每一步正確的輸出結(jié)果,再檢查一下神經(jīng)網(wǎng)絡(luò)每一步的結(jié)果,是不是一樣的。
  • 參考資料

    轉(zhuǎn)載于:https://www.cnblogs.com/DjangoBlog/p/7281491.html

    總結(jié)

    以上是生活随笔為你收集整理的深度学习网络调试技巧的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。