1. 程式人生 > >cafee訓練過程的,NAN現象查錯方法,參考

cafee訓練過程的,NAN現象查錯方法,參考

梯度爆炸

原因:梯度變得非常大,使得學習過程難以繼續

現象:觀察log,注意每一輪迭代後的loss。loss隨著每輪迭代越來越大,最終超過了浮點型表示的範圍,就變成了NaN。

措施:
1. 減小solver.prototxt中的base_lr,至少減小一個數量級。如果有多個loss layer,需要找出哪個損失層導致了梯度爆炸,並在train_val.prototxt中減小該層的loss_weight,而非是減小通用的base_lr。
2. 設定clip gradient,用於限制過大的diff

不當的損失函式

原因:有時候損失層中loss的計算可能導致NaN的出現。比如,給InfogainLoss層(資訊熵損失)輸入沒有歸一化的值,使用帶有bug的自定義損失層等等。

現象:觀測訓練產生的log時一開始並不能看到異常,loss也在逐步的降低,但突然之間NaN就出現了。

措施:看看你是否能重現這個錯誤,在loss layer中加入一些輸出以進行除錯。

示例:有一次我使用的loss歸一化了batch中label錯誤的次數。如果某個label從未在batch中出現過,loss就會變成NaN。在這種情況下,可以用足夠大的batch來儘量避免這個錯誤。

不當的輸入

原因:輸入中就含有NaN。

現象:每當學習的過程中碰到這個錯誤的輸入,就會變成NaN。觀察log的時候也許不能察覺任何異常,loss逐步的降低,但突然間就變成NaN了。

措施:重整你的資料集,確保訓練集和驗證集裡面沒有損壞的圖片。除錯中你可以使用一個簡單的網路來讀取輸入層,有一個預設的loss,並過一遍所有輸入,如果其中有錯誤的輸入,這個預設的層也會產生NaN。

案例:有一次公司需要訓練一個模型,把標註好的圖片放在了七牛上,拉下來的時候發生了dns劫持,有一張圖片被換成了淘寶的購物二維碼,且這個二維碼格式與原圖的格式不符合,因此成為了一張“損壞”圖片。每次訓練遇到這個圖片的時候就會產生NaN。良好的習慣是,你有一個檢測性的網路,每次訓練目標網路之前把所有的樣本在這個檢測性的網路裡面過一遍,去掉非法值。

池化層中步長比核的尺寸大

如下例所示,當池化層中stride > kernel的時候會在y中產生NaN

    layer {
      name: "faulty_pooling"
      type: "Pooling"
      bottom: "x"
      top: "y"
      pooling_param {
      pool: AVE
      stride: 5
      kernel: 3
      }
    }

致謝

相關推薦

cafee訓練過程NAN現象方法參考

梯度爆炸 原因:梯度變得非常大,使得學習過程難以繼續 現象:觀察log,注意每一輪迭代後的loss。loss隨著每輪迭代越來越大,最終超過了浮點型表示的範圍,就變成了NaN。 措施: 1. 減小solver.prototxt中的base_lr,至少減小一個數量級。如果有多個loss layer,需要找出哪

淺談php錯誤提示及方法

error 設置斷點 bugs notice -- 語法 打開 tin 開始 php有哪幾種錯誤提示 1.notice : 註意 2.waring : 警告 3.error : 錯誤 PHP中都有哪幾種查錯方法? 1、語法檢查--php配置文件裏,把錯誤顯示選項都打開或者代

續寫vimshell腳本基礎編輯read命令if與case判斷語句文件找方式壓縮與解壓

退出 hist match 時間戳 語法錯誤 margin 基本概念 相同 reg 一、 Vim續寫 ?1、命令擴展模式的位置定界 ??起始位置 cmd 終止位置???Cmd:????y復制????d刪除????Gu變大寫????gu變小寫??例如:0y$命令意味著:

androidstudio編譯失敗時方法

例如我遇到的錯誤為Execution failed for task ‘:app:processDebugResources’ 但沒有顯示到底是哪裡錯了。 你可以嘗試執行如下命令: ./gradlew assembleDebug --stacktrace 有三個引數可選:

360行人怕入來講講入

360行,行行出狀元。在很早很早之前的時候,心很浮躁,總覺得自己可以做很多的事情,看到別人有的做得不太好。就喜歡拿這句話來說。現在對這話有更深,不一樣的感觸。   特別是最近一段時間以來,重新梳理這一句話,發現更多的東西真的要從科學角度分析。   比如說說我的老本行

Hibernate(四):Hibernate的初始化增刪改方法

1,Hibernate初始化類 package com.hibernate; import org.hibernate.HibernateException; import org.hibernate.Session; import org.hibernate.Sessi

Wavenet網路在音樂演唱方便的應用效果比方法好很多

Wavenet網路在音樂演唱方便的應用,效果比查表方法好很多 小禪,學習深度學習和AI智慧語音方便一年多,主要是處理NLP方面的演算法以及文字生成方面。接下倆先說一下要學習深度學習的路線和比較關鍵的點吧。 語言問題:這裡的語言由兩層含義,其一:英語語言,為何這麼說因為深度

傳送郵件功能以及郵箱報501535!!!

前言 大多開發專案中都會有著傳送郵件的需求,例如定時傳送郵件,驗證郵件等等。 此文介紹傳送郵件功能 前期準備 mail.jar包 建立一個class檔案 class檔案內容(模板): public class Mail { public static

關於MVCC我之前寫這次我改好了!

關於MVCC的原理,在《我想進大廠》之mysql奪命連環13問寫過一次,但是當時寫的其實並不準確,這個理解可以應付面試,幫助快速理解,但是他的真正實現原理我想再次拿出來說一說。 簡單理解版 以下先引用我之前寫過的那篇中的內容,可以快速理解,建議先簡單看看。 要說幻讀,首先要了解MVCC,MVCC叫做多版本

臥槽線上資料刪差點被老闆開除

前言 無論是開發、測試,還是DBA,都難免會涉及到資料庫的操作,比如:建立某張表,新增某個欄位、新增資料、更新資料、刪除資料、查詢資料等等。 正常情況下還好,但如果操作資料庫時出現失誤,比如: 刪除訂單資料時where條件寫錯了,導致多刪了很多使用者訂單。 更新會員有效時間時,一次性把所有會員的有效時間都更

潭州課堂25班:Ph201805201 第十一課 繼承多繼承和魔術方法屬性和方法 (課堂筆記)

筆記 父類 當前 TE -s __del__ color true ont 繼承: class p : cls_name = ‘p‘ def __init__(self): print(‘正在實例化‘) def __del__(se

svn更新路徑解決辦法詳細步驟eclipse裏面的更新方法svn廢棄位置Windows環境svn服務器地址換了如何更新本地工作目錄

沒有 eclipse 解決辦法 會有 checkout 工作 log 當前 目錄 svn更新路徑,解決辦法詳細步驟,eclipse裏面的更新方法,svn廢棄位置,Windows環境,svn服務器地址換了,如何更新本地工作目錄 Windows下,svn服務器IP本來是內網一臺

Python:類屬性實例屬性私有屬性與靜態方法方法實例方法

所有 參數 方法 rate self 類屬性 不能 anaconda 賦值 類屬性可以直接在方法中賦值,但 一、調用該屬性時,必須先調用該方法; 二、與 init 方法區別是,init方法只初始化一次,初始化完成後作為全局變量。在方法中賦值屬性,每次調用該方法,該屬性初始化

子函式呼叫父函式父函式呼叫的方法子函式重寫了那麼最後父函式呼叫的是自己的方法還是子函式的方法

Q:子類呼叫父類的方法,父類中某個方法所呼叫的方法,子類也重寫了,那麼最後父類中的方法呼叫的是自己的方法,還是子類的方法。 A:呼叫的是子類的方法。     看程式碼: public class Parent { public void used

Date獲得當前時間後獲得年月日的方法已經不在被經常使用需要更新了

文章轉載於:https://blog.csdn.net/ChineseLion/article/details/54376267 import java.util.Calendar; public class SysDate { public static void main(String[]

歸併排序至底向上的方法不會減少複雜度但是會使程式碼更加簡單

package eighty; public class Guibingshangxiangxia {        public static void main(String[] args) {        &

通過反射建立私有化類的物件呼叫類的私有方法改變私有屬性

首先建立一個類 public class ReflectDemo { private int m=0; //私有屬性 private ReflectDemo(){ //私有無參建構函式 } public ReflectDemo(int aa

Spring Mvc Controller類的方法上的@RequestMapping寫在介面方法然後Controller實現哪個方法@RequestMapping一樣會生效

不僅僅是@RequestMapping註解,類似於@Autowired之類的註解都是如此,在也會生效。 spring mvc是通過反射獲得父介面得到的相應的註解資訊。 估計這麼做的原因是為了彌補java本身註解只能在類上並且標註了@Inherited才能被繼承的缺陷。。。spring mvc

ie相容es6ie相容ES6的方法包括箭頭函式Promiseasyncawait

1. 使用es6語法(不包含Promise) script標籤的type的值設為text/babel <script type="text/babel"> const arr1=[1,2,3] const arr2=[...arr1] console.

面試題:除了構造方法除了抽象方法沒有加static的方法一定是例項方法嗎?

面試題:除了構造方法,除了抽象方法,沒有加static的方法,一定是例項方法嗎?   答:native修飾的、default修飾的那你能算作例項方法嗎???但是有個現實是,使用類名是無法呼叫native修飾的方法的,default修飾的方法,同樣無法使用介面名、類名進行呼叫,只