国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

關于訓練神經網絡的37個小建議!

電子工程師 ? 來源: AI公園 ? 作者:Slav Ivanov ronghuai ? 2021-04-08 09:58 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

這個網絡在過去12個小時中一直在進行訓練。一切看起來都很好:梯度在流動,損失在降低。但是接下來的預測結果是:所有都是0,所有都是背景,沒有檢測到任何東西。“我做錯了什么?”—我問我的電腦,電腦沒睬我。

你從哪里開始檢查你的模型是否正在輸出垃圾(例如預測所有輸出的平均值,或者它的準確性非常差)?

由于一些原因,網絡可能不會進行訓練。在許多調試的過程中,我經常發現自己在執行相同的檢查。我把我的經驗和最好的想法整理在這個方便的列表里。我希望它們對你也有用。

如何使用這個指南?

很多事情都可能出錯。但其中一些更有可能出現問題。我通常以這張簡短的清單作為緊急第一反應:

從一個已知對這類數據有效的簡單模型開始(例如,圖像的VGG)。如果可能的話,使用標準的損失。關閉所有花哨的功能,例如正則化和數據擴充。如果對模型進行finetune,請仔細檢查預處理,因為預處理應該與原始模型的訓練相同。驗證輸入數據是否正確。

從一個很小的數據集(2-20個樣本)開始。對其進行過擬合,并逐漸添加更多數據。

開始逐步添加所有遺漏的部分:增強/正則化,自定義損失函數,嘗試更復雜的模型。

如果上面的步驟沒有什么用,那么就從下面的列表開始,逐一驗證。

一 . 數據集的問題

1. 檢查你的輸入數據

檢查你正在向網絡提供的輸入數據是否有意義。例如,我不止一次地搞混了圖像的寬度和高度。有時,我會不小心把輸入全部搞成了0。或者我會反復的使用相同batch。因此,打印/顯示兩個batch的輸入和目標輸出,并確保它們是正確的。

2. 嘗試隨機的輸入

嘗試傳遞隨機數而不是實際數據,看看錯誤的現象是否相同。如果是的話,這是一個確定的信號,表明你的網絡在某個時候正在把數據變成垃圾。試著一層一層地調試看看哪里出錯了。

3. 檢查你的數據加載

你的數據可能沒有問題,但是將輸入傳遞到網絡的代碼可能會有問題。在任何操作之前打印第一層的輸入并檢查它。

4. 確保輸入連接到了輸出

檢查一些輸入樣本的標簽是否正確。還要確保對輸入樣本的變換對輸出標簽的作用是相同的。

5. 輸入和輸出之間的關系是不是太隨機了?

也許輸入和輸出之間關系的非隨機部分與隨機部分相比太小了(有人可能會說股票價格是這樣的)。也就是說,輸入與輸出的關系并不充分。由于這取決于數據的性質,因此沒有一種通用的方法來檢測這一點。

6. 數據集中是否有太多的噪聲?

有一次,當我從一個食品網站上抓取圖像數據集時,這種情況發生在我身上。有太多不好的標簽,網絡無法學習。手動檢查一些輸入樣本,看看標簽是不是正確。

噪聲的截止點有待討論,因為本文在使用50%損壞標簽的MNIST上獲得了超過50%的準確性。

7. 打亂數據集

如果你的數據集沒有被打亂,并且有一個特定的順序(按標簽排序),這可能會對學習產生負面的影響。打亂你的數據集,以避免這種情況。確保你在進行打亂的時候,是把輸入和標簽一起打亂的。

8. 減少類別的不均衡

每一個類別B的圖像就有1000個類別A的圖像?你可能需要平衡損失函數或嘗試其他類別不平衡的方法。

9. 你有足夠的訓練樣本嗎?

如果你正在從頭開始訓練一個網絡,你可能需要大量的數據。對于圖像分類,人們說每個類需要1000個或更多的圖像。

10. 確保你的batch里不只包含同一個標簽

這可能發生在排過序的數據集中(即前10k個樣本包含相同的類)。通過打亂數據集很容易修復。

11. 減少batch size

這篇文章指出大的batch size會降低模型的泛化能力。

附加1. 使用標準的數據集(如mnist, cifar10 )

在測試新網絡架構或編寫新代碼時,首先使用標準數據集,而不是你自己的數據。 這是因為這些數據集有很多參考結果,而且它們被證明是“可解的”。 不會出現標簽噪聲、訓練/測試分布差異、數據集難度過大等問題。

II . 數據歸一化/增強

12. 特征標準化

你是否標準化了你的輸入使其均值和單位方差為零?

13. 你是不是用了太多的數據增強?

增強具有規律性的效果。太多的這些與其他形式的正則化(權值的L2,dropout等等)結合在一起會導致網絡欠擬合。

14. 檢查你的預訓練模型的預處理

如果你使用的是預訓練模型,請確保你使用的歸一化和預處理與訓練時的模型相同。例如,圖像像素應該在[0,1]、[- 1,1]還是[0,255]范圍內?

15. 檢查訓練/驗證/測試集的預處理

CS231n指出了一個常見的陷阱:

“……任何預處理統計數據(例如數據平均值)必須僅對訓練數據進行計算,然后應用于驗證/測試數據。” 例如,計算平均值并從整個數據集中的每幅圖像中減去它,然后將數據分割為train/val/test分割是錯誤的。"

同時,檢查每個樣本或batch的預處理的不同之處。

III . 實現中的問題

16.嘗試解決這個問題的更簡單的版本的問題

這將有助于找到問題所在。例如,如果目標輸出是物體的類別和坐標,請嘗試只預測物體的類別。

17.看看“隨機”時候的正確的損失

再次來自優秀的CS231n:使用小參數進行初始化,沒有正則化。例如,如果我們有10個類,在隨機的情況下意味著我們將有10%的時候會得到正確的類,Softmax損失是正確類的概率的負對數,因此:-ln(0.1) = 2.302.

在此之后,試著增加正則化強度,這會增加損失。

18. 檢查你的損失函數

如果你實現了自己的loss函數,那么檢查它的bug并添加單元測試。通常,我自己寫的損失可能是不正確的,并以一種微妙的方式損害了網絡的性能。

19. 驗證損失的輸入

如果你使用的是框架提供的loss函數,請確保你傳遞給它的是它所期望的。例如,在PyTorch中,我會混淆NLLLoss和CrossEntropyLoss,因為前者需要softmax輸入,而后者不需要。

20. 調整損失的權重

如果你的損失由幾個較小的損失函數組成,請確保它們相對于每個損失函數的大小是正確的。這可能涉及測試不同的損失權重組合。

21. 使用其他的度量方法進行監控

有時候,損失并不能很好地預測你的網絡是否訓練的好。如果可以,使用其他指標,如準確性。

22. 測試所有的自定義的層

你自己實現了網絡中的一些層嗎?反復檢查以確保它們按照預期工作。

23. 檢查“凍結”的層和變量

檢查你是否無意中禁用了一些層/變量的梯度的更新。

24. 增加網絡的大小

也許你的網絡的表達能力不足以得到目標函數。嘗試在全連接的層中添加更多的層或更多的隱藏單元。

25. 檢查隱藏維度的錯誤

如果你的輸入看起來像(k, H, W) =(64, 64, 64)那么很容易忽略與錯誤維度相關的錯誤。對輸入維度使用奇怪的數字(例如,每個維度使用不同的素數),并檢查它們如何在網絡中傳播。

26. 梯度檢查

如果你手動實現梯度下降,檢查梯度,確保你的反向傳播工作正常。

IV. 訓練問題

27. 處理小數據集

過擬合數據的一個子集,并確保它能工作。例如,用一兩個樣本來訓練,看看你的網絡是否能學會區分它們。再繼續使用每個類的更多樣本。

28. 檢查權值初始化

如果不確定的話,使用Xavier或He初始化。另外,初始化可能會導致錯誤的局部最小值,所以嘗試不同的初始化,看看是否有幫助。

29. 改變你的超參數

也許你使用了一組特別糟糕的超參數。如果可行,嘗試網格搜索。

30. 減少正則化

過多的正則化會導致網絡嚴重欠擬合。減少正規化,如dropout、、權重/偏置L2正規化等。在優秀的“Practical Deep Learning for coders”課程中,Jeremy Howard建議首先擺脫欠擬合。這意味著你需要對訓練數據進行充分的過擬合,然后再解決過擬合問題。

31. 多給點時間

也許你的網絡需要更多的時間來訓練,才能開始做出有意義的預測。如果你的損失在穩步減少,那就讓它繼續訓練吧。

32. 從訓練模式切換到測試模式

有些框架具有Batch Norm、drop等層,在訓練和測試期間的行為有所不同。切換到適當的模式可能有助于你的網絡進行正確的預測。

33. 訓練可視化

監控每一層的激活值、權重和更新。確保它們大小匹配。例如,參數更新的大小(權重和偏差)應該是1-e3。

考慮一個可視化庫,比如Tensorboard和Crayon。必要時,你還可以打印權重/偏置/激活值。

尋找平均值比0大得多的層激活。嘗試 Batch Norm或ELUs。

Deeplearning4j指出在權重和偏差直方圖中應該能看到:
對于權值,這些直方圖在一段時間后應該有一個近似的高斯分布。 對于偏置,這些直方圖通常從0開始,通常以近似高斯分布結束(LSTM是一個例外)。 注意那些發散到+/-∞的參數。留意那些變得很大的偏置。 如果類的分布非常不平衡,這種情況有時會發生在分類的輸出層。

檢查層的更新,他們應該是一個高斯分布。

34. 嘗試不同的優化器

你選擇的優化器不應該會導致你的網絡不訓練,除非你選擇了特別糟糕的超參數。然而,對于一個任務,適當的優化器可以幫助在最短的時間內獲得最多的訓練。你正在使用的算法的論文中應該會指定優化器。如果不是,我傾向于使用Adam或使用動量的SGD。

查看Sebastian Ruder的excellent post了解更多關于梯度下降優化器的信息。

35. 梯度爆炸/消失

檢查層的更新,因為很大的值可以導致梯度爆炸。梯度剪裁可能會有所幫助。

檢查層的激活。來自Deeplearning4j的是一條很好的指導方針:“一個好的激活值的標準差在0.5到2.0之間。顯著地超出這個范圍可能意味著激活值的消失或爆炸”

36. 增大/降低學習率

較低的學習率會導致模型非常緩慢地收斂。

高學習率將在開始時迅速減少損失,但可能很難找到一個好的解決方案。

把你當前的學習速度乘以0.1或10。

37. 克服NaNs

在訓練RNN時,獲得NaN (Non-a-Number)是一個更大的問題。一些解決方法:

降低學習速率,特別是在前100次迭代中獲得NaNs時。

NaNs可以由除以0或ln(0)或負數得到。

Russell Stewart有很多關于如何處理NaNs的建議()。

嘗試逐層評估你的網絡,并查看NaNs出現在哪里。

英文原文:https://blog.slavv.com/37-reasons-why-your-neural-network-is-not-working...

編輯:jq

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 神經網絡
    +關注

    關注

    42

    文章

    4838

    瀏覽量

    107862
  • AI
    AI
    +關注

    關注

    91

    文章

    39911

    瀏覽量

    301538
  • rnn
    rnn
    +關注

    關注

    0

    文章

    92

    瀏覽量

    7355
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    神經網絡的初步認識

    日常生活中的智能應用都離不開深度學習,而深度學習則依賴于神經網絡的實現。什么是神經網絡神經網絡的核心思想是模仿生物神經系統的結構,特別是大腦中神經
    的頭像 發表于 12-17 15:05 ?339次閱讀
    <b class='flag-5'>神經網絡</b>的初步認識

    自動駕駛中常提的卷積神經網絡啥?

    在自動駕駛領域,經常會聽到卷積神經網絡技術。卷積神經網絡,簡稱為CNN,是一種專門用來處理網格狀數據(比如圖像)的深度學習模型。CNN在圖像處理中尤其常見,因為圖像本身就可以看作是由像素排列成的二維網格。
    的頭像 發表于 11-19 18:15 ?2087次閱讀
    自動駕駛中常提的卷積<b class='flag-5'>神經網絡</b>是<b class='flag-5'>個</b>啥?

    NMSIS神經網絡庫使用介紹

    (q7_t) 和 16 位整數 (q15_t)。 卷積神經網絡示例: 本示例中使用的 CNN 基于來自 Caffe 的 CIFAR-10 示例。神經網絡由 3 卷積層組成,中間散布著 ReLU
    發表于 10-29 06:08

    構建CNN網絡模型并優化的一般化建議

    通過實踐,本文總結了構建CNN網絡模型并優化的一般化建議,這些建議將會在構建高準確率輕量級CNN神經網絡模型方面提供幫助。 1)避免單層神經網絡
    發表于 10-28 08:02

    如何將訓練好的神經網絡模型部署到蜂鳥e203開發板上

    本帖欲分享如何將訓練好的神經網絡模型部署到蜂鳥e203開發板上。 1. 加載TFLite模型 std::unique_ptr interpreter(new tflite::Interpreter
    發表于 10-22 08:04

    在Ubuntu20.04系統中訓練神經網絡模型的一些經驗

    本帖欲分享在Ubuntu20.04系統中訓練神經網絡模型的一些經驗。我們采用jupyter notebook作為開發IDE,以TensorFlow2為訓練框架,目標是訓練
    發表于 10-22 07:03

    CICC2033神經網絡部署相關操作

    在完成神經網絡量化后,需要將神經網絡部署到硬件加速器上。首先需要將所有權重數據以及輸入數據導入到存儲器內。 在仿真環境下,可將其存于一文件,并在 Verilog 代碼中通過 readmemh 函數
    發表于 10-20 08:00

    液態神經網絡(LNN):時間連續性與動態適應性的神經網絡

    1.算法簡介液態神經網絡(LiquidNeuralNetworks,LNN)是一種新型的神經網絡架構,其設計理念借鑒自生物神經系統,特別是秀麗隱桿線蟲的神經結構,盡管這種微生物的
    的頭像 發表于 09-28 10:03 ?1252次閱讀
    液態<b class='flag-5'>神經網絡</b>(LNN):時間連續性與動態適應性的<b class='flag-5'>神經網絡</b>

    神經網絡的并行計算與加速技術

    隨著人工智能技術的飛速發展,神經網絡在眾多領域展現出了巨大的潛力和廣泛的應用前景。然而,神經網絡模型的復雜度和規模也在不斷增加,這使得傳統的串行計算方式面臨著巨大的挑戰,如計算速度慢、訓練時間長等
    的頭像 發表于 09-17 13:31 ?1143次閱讀
    <b class='flag-5'>神經網絡</b>的并行計算與加速技術

    基于神經網絡的數字預失真模型解決方案

    在基于神經網絡的數字預失真(DPD)模型中,使用不同的激活函數對整個系統性能和能效有何影響?
    的頭像 發表于 08-29 14:01 ?3480次閱讀

    無刷電機小波神經網絡轉子位置檢測方法的研究

    摘要:論文通過對無刷電機數學模型的推導,得出轉角:與三相相電壓之間存在映射關系,因此構建了一以三相相電壓為輸人,轉角為輸出的小波神經網絡來實現轉角預測,并采用改進遺傳算法來訓練網絡
    發表于 06-25 13:06

    神經網絡專家系統在電機故障診斷中的應用

    摘要:針對傳統專家系統不能進行自學習、自適應的問題,本文提出了基于種經網絡專家系統的并步電機故障診斷方法。本文將小波神經網絡和專家系統相結合,充分發揮了二者故障診斷的優點,很大程度上降低了對電機
    發表于 06-16 22:09

    神經網絡RAS在異步電機轉速估計中的仿真研究

    眾多方法中,由于其結構簡單,穩定性好廣泛受到人們的重視,且已被用于產品開發。但是MRAS仍存在在低速區速度估計精度下降和對電動機參數變化非常敏感的問題。本文利用神經網絡的特點,使估計更為簡單、快速
    發表于 06-16 21:54

    基于FPGA搭建神經網絡的步驟解析

    本文的目的是在一神經網絡已經通過python或者MATLAB訓練好的神經網絡模型,將訓練好的模型的權重和偏置文件以TXT文件格式導出,然后
    的頭像 發表于 06-03 15:51 ?1241次閱讀
    基于FPGA搭建<b class='flag-5'>神經網絡</b>的步驟解析

    NVIDIA實現神經網絡渲染技術的突破性增強功能

    近日,NVIDIA 宣布了 NVIDIA RTX 神經網絡渲染技術的突破性增強功能。NVIDIA 與微軟合作,將在 4 月的 Microsoft DirectX 預覽版中增加神經網絡著色技術,讓開
    的頭像 發表于 04-07 11:33 ?1203次閱讀