網(wǎng)格搜索和隨機搜索各自的缺點 量化app哪個最好?
量化app哪個最好?目前國內(nèi)最常用的ap軟件有兩個,分別是恒生PTrad如何更好地調(diào)試神經(jīng)網(wǎng)絡?聲明:本文適合神經(jīng)網(wǎng)絡初學者。神經(jīng)網(wǎng)絡的調(diào)試比大多數(shù)程序更難,因為大多數(shù)bug不會導致運行錯誤,只會導致
量化app哪個最好?
目前國內(nèi)最常用的ap軟件有兩個,分別是恒生PTrad
如何更好地調(diào)試神經(jīng)網(wǎng)絡?
聲明:本文適合神經(jīng)網(wǎng)絡初學者。
神經(jīng)網(wǎng)絡的調(diào)試比大多數(shù)程序更難,因為大多數(shù)bug不會導致運行錯誤,只會導致不好的收斂??赡苡性S多看似模糊的錯誤消息:
性能錯誤:您的神經(jīng)網(wǎng)絡沒有訓練好(性能:您的神經(jīng)網(wǎng)絡沒有訓練好)。
如果你有經(jīng)驗,你應該知道這意味著代碼需要大的改變。
第一,對付南?在大多數(shù)情況下,NaN錯誤發(fā)生在前100次迭代中,原因很簡單:你的學習率太高了。當學習率很高時,在前100次迭代中會出現(xiàn)NaN錯誤。使用系數(shù)3來降低學習率,直到前100次迭代不再出現(xiàn)NaN錯誤。一旦這樣做了,你將會有一個非常好的學習速度。根據(jù)我的經(jīng)驗,最好的學習率是你得到NaN錯誤的范圍的十分之一。
如果在100次迭代后遇到NaN錯誤,有兩個常見原因。
如果你正在使用RNN,確保你正在使用梯度下降,并糾正它。用L2正則化梯度。RNN在訓練初期似乎有一個梯度,10%以下批次有學習高峰,此時梯度幅度相當高。如果不切割梯度,這些峰將產(chǎn)生NaN。
如果寫自定義網(wǎng)絡層,很有可能NaN是除以0造成的。另一個已知會產(chǎn)生Nan誤差的層是Softmax層。Softmax計算包括分子和分母的exp(x)運算,可以將無窮大除以無窮大,得到NaN。確保使用穩(wěn)定的Softmax實現(xiàn)。
第二,神經(jīng)網(wǎng)絡可以 不學?一旦你沒有NaN誤差,你的神經(jīng)網(wǎng)絡可以平滑運行上千次迭代,也不會減少前幾百次迭代后的訓練損失。當你第一次構建代碼庫時,你 最好不要使用2000次迭代。這并不是因為所有的網(wǎng)絡都可以從少于2000次的迭代中學習。相反,從一開始就對網(wǎng)絡進行編碼很可能會有bug,在達到高迭代次數(shù)之前,您會希望過早地對其進行調(diào)試?,F(xiàn)在的目標是一次又一次地縮小問題的范圍,直到你得到一個在2000次迭代下訓練出來的網(wǎng)絡。幸運的是,有兩種方法可以降低復雜性。
將訓練集的大小減少到10個實例。在數(shù)百次迭代中,在這10個實例中,神經(jīng)網(wǎng)絡通常出現(xiàn)過擬合。許多編碼錯誤不會導致過擬合。如果你的網(wǎng)絡沒有。;不要過度適應10個示例的訓練集,請確保您使用的數(shù)據(jù)標記正確。將批次大小減少到1,以檢查批次計算錯誤。將打印語句添加到代碼中,以確保輸出與您的期望一致。通??梢酝ㄟ^上面介紹的純蠻力找出錯誤。一旦可以在10個實例上訓練網(wǎng)絡,就可以嘗試在100個實例上訓練它。如果這種方常工作,但效果不是很好,可以嘗試以下方法。
解決你感興趣的最簡單的問題。如果要翻譯句子,可以先建立一個特定語言的語言模型。如果你已經(jīng)完成了,試著用三個單詞預測第一個翻譯的單詞。如果要檢測圖像中的物體,可以在訓練回歸網(wǎng)絡之前對圖像中的物體數(shù)量進行分類。在網(wǎng)絡可以解決的棘手問題和使用最少的時間為代碼獲取適當?shù)臄?shù)據(jù)之間有一個權衡。這是發(fā)揮你創(chuàng)造力的時候了。
將神經(jīng)網(wǎng)絡應用到其他新場景的技巧就是合理使用上面介紹的兩個步驟。這是一種協(xié)調(diào)機制,效果不錯。首先,你表明這個神經(jīng)網(wǎng)絡至少能記住幾個例子。然后這個神經(jīng)網(wǎng)絡可以推廣到更簡單問題的驗證集。你在穩(wěn)步前進的同時也在慢慢增加難度。It 沒有卡帕西 專家第一次使用的風格,但至少它是有效的。有時候你會遇到難題,你會的發(fā)現(xiàn)2000次迭代就不再繼續(xù)學習了。那個 太棒了!但是迭代次數(shù)很少是這個問題之前復雜度的10倍。如果您發(fā)現(xiàn)是這種情況,請嘗試搜索中等復雜程度。
第三,調(diào)整參數(shù)?,F(xiàn)在你的網(wǎng)絡可以學習東西,你可能會忘乎所以。你可能還會發(fā)現(xiàn)你訓練的網(wǎng)絡可以 不能解決大多數(shù)復雜的問題。超參數(shù)調(diào)整是解決問題的關鍵。有些人直接下載CNN軟件包并在他們的數(shù)據(jù)集上運行,然后告訴你使用超參數(shù)調(diào)整并不 沒什么區(qū)別。這是因為他們使用現(xiàn)有的架構來解決現(xiàn)有的問題。如果你想解決的問題需要一個新的架構,就需要通過超參數(shù)調(diào)整來得到一個好的設置。你 d最好確定你已經(jīng)看了你要解決的問題的超參數(shù)教程,不過我下面會列出一些基本思路。
可視化:唐 不要害怕在培訓期間花時間編寫定制的可視化工具。如果你的可視化方法不。;如果行不通,考慮另一種方法。
權重初始化:一般來說,較大的初始化權重是一個不錯的選擇,但是過大會導致NaN。
確保重量看起來 "健康 "。為了理解這意味著什么,我建議在IPython 的筆記本?;c時間觀察在標準數(shù)據(jù)集(如ImageNet或Penn Tree Bank)上訓練的成熟網(wǎng)絡中組件權重的直方圖應該是什么樣子。
神經(jīng)網(wǎng)絡的w.r.t輸入不是常數(shù),特別是用SGD代替其他方法時,因為SGD不是一種尺度不變的方法?;〞r間以其他擴展輸入數(shù)據(jù)和輸出標簽。
在訓練中降低學習率幾乎總能給你帶來進步。最佳衰減策略通常是:K次迭代后,每N次迭代用1.5 kgtn除學習率。
使用參數(shù)配置文件,雖然把參數(shù)放到代碼里是可以的,但是如果要嘗試不同的值會比較麻煩。我將參數(shù)放在一個JSON文件中,并用一個命令導入它們。確切的格式并不重要。唐 不要輕易重構代碼,因為重載超參數(shù)更麻煩!重構會引入bug,會延長訓練周期,在你得到喜歡的網(wǎng)絡之前是可以避免的。
更多優(yōu)質(zhì)內(nèi)容,請持續(xù)關注鎂客網(wǎng)~ ~