国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

調試神經網絡讓人抓狂?這有16條錦囊妙計送給你

Scorpion / 1386人閱讀

摘要:即便對于行家來說,調試神經網絡也是一項艱巨的任務。神經網絡對于所有失真應該具有不變性,你需要特別訓練這一點。對于負數,會給出,這意味著函數沒有激活。換句話說,神經元有一部分從未被使用過。這是因為增加更多的層會讓網絡的精度降低。

即便對于行家來說,調試神經網絡也是一項艱巨的任務。數百萬個參數擠在一起,一個微小的變化就能毀掉所有辛勤工作的成果。然而不進行調試以及可視化,一切就只能靠運氣,最后可能浪費掉大把的青春歲月。

怎么辦?這里是我總結的一些方法,希望對你有所幫助。

數據集問題

嘗試用小數據集來過擬合你的模型

一般來說,幾百次迭代后神經網絡就會對數據過擬合。如果損失還不下降,那么問題可能就深了。

使用迭代邏輯來解決問題

先建立一個最小的網絡來解決核心問題,然后一步一步擴展到全局問題。比方構建一個風格遷移網絡,應該首先在一張圖片上訓練。成功之后,再構建一個可以對任意圖片實現風格遷移的模型。

使用帶有失真的平衡數據集

以訓練模型進行數據分類為例,每一類的輸入訓練數據量應該一致。不然會出現某一類的過擬合。神經網絡對于所有失真應該具有不變性,你需要特別訓練這一點。所以輸入一些失真數據,有助于提高網絡的準確率。

網絡容量與數據大小

數據集應該足以讓網絡完成學習。如果大網絡配上小數據集,學習過程就會停止,有可能一大堆輸入都得出同樣的輸出。如果小網絡配上大數據集,你會遇見損失的跳躍,因為網絡容量存儲不了這么多信息。

使用平均中心化

這有助于從網絡中去除噪音數據,并且提高訓練效果,在某些情況下還有助于解決NaN問題。不過切記對于時間序列數據,應該使用批量中心化而不是全局。

神經網絡問題

首先嘗試簡單的模型

我看到太多人一上來就嘗試ResNet-50、VGG19等標準的大型網絡,結果發現他們的問題其實只要幾層網絡就能解決。所以如果不是有什么戀大的情結,麻煩你從小型網絡開始著手。

增加的東西越多,越難訓練出一個解決問題的模型。從小網絡開始訓練,可以節省更多的時間。以及,大網絡會占用更多的內存和運算。

必須可視化

如果用TensorFlow,那就必須用Tensorboard。否則,請為你的框架找到別的可視化工具,或者自己寫一個。因為這有助于你在訓練早期階段發現問題。你應該明確的看到這些數據:損失、權重直方圖、變量和梯度。

如果是處理計算機視覺方面的工作,始終要對過濾器進行可視化,這樣才能清楚的了解網絡正在看到的是什么內容。

權重初始化

如果不能正確的設置權重,你的網絡可能會因為梯度消失等原因變得無法學習。以及你要知道權重和學習率互相結合,大學習率和大權重可能導致NaN問題。

對于小型網絡,在1e-2~1e-3附近使用一些高斯分布初始化器就夠了。

對于深層網絡這沒什么用,因為權重將相乘多次,這會帶來非常小的數字,幾乎可以消除反向傳播那步的梯度。多虧了Ioffe和Szegedy,我們現在有了Batch-Normalization(批量歸一化),這能減少好多麻煩。

標準問題使用標準網絡

有很多你立馬就能用的預訓練模型。在某些情況下,你可以直接使用這些模型,也可以進行微調節省訓練時間。核心思想是,對于不同的問題,大多數網絡的容量是一樣的。比方,搞計算機視覺,那么網絡的第一層就是由簡單的過濾器構成,例如線、點等等,所有的圖片都是如此,根本不需要重新訓練。

使用學習率衰減

這總能對你有所幫助。TensorFlow里面有很多可以用的衰減調度器。

使用網格搜索或隨機搜索或配置文件來調整超參數

不要手動檢查所有的參數,這樣耗時而且低效。我通常對所有參數使用全局配置,檢查運行結果之后,我回進一步研究改進的方向。如果這種方法沒有幫助,那么你可以使用隨機搜索或者網格搜索。

關于激活函數

1、關于梯度消失的問題

例如Sigmoid以及Tanh等激活函數存在飽和問題,也就是在函數的一端,激活函數的導數會趨近于零,這會“殺死”梯度和學習過程。所以換用不同的激活函數是個好主意?,F在標準的激活函數是ReLU。

此外這個問題也可能出現在非常深或者循環網絡中,例如對于一個150層的網絡,所有的激活函數都給定為0.9,那么0.91?? = 0,000000137。正如我上面提到的,批量歸一化有助于解決這個問題。

2、非零中心激活函數

Sigmoid、ReLU都不是以零為中心的激活函數。這意味著在訓練期間,所有的梯度都將是正(或者負)的,這會導致學習過程中出現問題。這也是為什么我們使用零中心化的輸入數據。

3、無效ReLU

標準的ReLU函數也不完美。對于負數,ReLU會給出0,這意味著函數沒有激活。換句話說,神經元有一部分從未被使用過。發生這種情況的原因,主要是使用了大學習率以及錯誤的權重初始化。如果參數調整不能幫你解決這個問題,可以嘗試Leaky ReLU、PReLU、ELU或者Maxout等函數。

4、梯度爆炸

這個問題與梯度消失差不多,只不過是每一步梯度越來越大。一個解決的方案是使用梯度裁剪,也就是給梯度下了一個硬限制。

深層網絡的網絡精度退化

非常深層的網絡有個問題,就是會從某些點開始表現就完全崩了。這是因為增加更多的層會讓網絡的精度降低。解決的辦法是使用殘差層,保證部分輸入可以穿過所有層。殘差網絡如下圖所示。

如果上述種種沒有提到你遇見的問題,你可以聯系作者進一步討論,作者在推特上的ID是:creotiv。

歡迎加入本站公開興趣群

商業智能與數據分析群

興趣范圍包括各種讓數據產生價值的辦法,實際應用案例分享與討論,分析工具,ETL工具,數據倉庫,數據挖掘工具,報表系統等全方位知識

QQ群:81035754

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/4619.html

相關文章

  • 利用聯網工具Matchvs在Unity中創建多人聯網游戲

    摘要:眾所周知,利用本身內置的多人聯網功能與高級應用程序接口可以實現創建多人工程。本次我們教大家的就是利用國內一個名叫的第三方插件工具來實現多人聯網,實現過程十分簡單且支持自定義拓展。具體教程如下新建游戲使用游戲云需要,通過官網創建游戲獲取。 通常而言,對于不少開發人員而言,開發一款多人在線游戲通常是一件麻煩事,復雜的測試,繁瑣的調試過程,還會時不時會出現一些幾乎無法復現的BUG。另外,更讓...

    jsliang 評論0 收藏0
  • 利用聯網工具Matchvs在Unity中創建多人聯網游戲

    摘要:眾所周知,利用本身內置的多人聯網功能與高級應用程序接口可以實現創建多人工程。本次我們教大家的就是利用國內一個名叫的第三方插件工具來實現多人聯網,實現過程十分簡單且支持自定義拓展。具體教程如下新建游戲使用游戲云需要,通過官網創建游戲獲取。 通常而言,對于不少開發人員而言,開發一款多人在線游戲通常是一件麻煩事,復雜的測試,繁瑣的調試過程,還會時不時會出現一些幾乎無法復現的BUG。另外,更讓...

    masturbator 評論0 收藏0
  • mongo索引構建

    摘要:在生產環境里,這簡直就是夢魘,因為沒辦法中止索引構建。最明智的建議是將索引構建當做某類數據庫遷移來看待,確保應用程序的代碼不會自動聲明索引。索引的構建分為兩步。如果發生在生產環境里,這無疑是很糟糕的,這也是長時間索引構建讓人抓狂的原因。 聲明索引時要小心 由于這個步驟太容易了,所以也很容易在無意間觸發索引構建。如果數據集很大,構建會花很長時間。在生產環境里,這簡直就是夢魘,因為沒辦法中...

    Salamander 評論0 收藏0
  • 猿猿有責,維持整潔的 Git 提交記錄,三個錦囊送給

    摘要:背景背景大家都有學習如何規范簡潔的編寫代碼,但卻很少學習如何規范簡潔的提交代碼。背景 大家都有學習如何規范簡潔的編寫代碼,但卻很少學習如何規范簡潔的提交代碼?,F在大家基本上都用 Git 作為源碼管理的工具,Git 提供了極大的靈活性,我們按照各種 workflow 來提交/合并 code,這種靈活性把控不好,也會帶來很多問題 最常見的問題就是亂成一團的 git log histo...

    wendux 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<