2016-04-03 44 views
1

我正在訓練一個簡單的前饋模型,每個(隱藏層+非線性)組合之間有3個或4個隱藏層和退出。 有時在幾個時代(大約10-11)後,模型開始輸出Infs和NaN作爲NLL的誤差,精度下降到0.0%。當我不使用退出時,這個問題不會發生。這是一個在Theano中退出的已知問題嗎?我實現丟失的方式是:爲什麼Theano會在使用退出時拋出NaN?

def drop(self, input): 
    mask = self.theano_rng.binomial(n=1, p=self.p, size=input.shape, dtype=theano.config.floatX) 
    return input * mask 

其中輸入是我們要應用丟失的特徵向量。 我也觀察到,如果失落概率(self.p)較高,則NaN的發生發生得更早。 p = 0.5會導致NaN出現在時期1或2附近,但是p = 0.7會導致NaN出現在時期10或11附近。 只有當隱藏層大小較大時纔會發生NaN。例如(800,700,700)給出了NaN,而(500,500,500)則沒有。

回答

0
以我的經驗,NaN的

,訓練網絡通常是因爲兩個問題發生時:

  • 第一,數學錯誤,例如負值的日誌。當你在損失函數中使用log()時可能會發生這種情況。
  • 其次,有一個值變得太大,所以python無法處理。

在你的情況,從你的觀察,我認爲這是第二種情況。你的損失值可能會變得太大而無法用python來處理。嘗試擴展網絡時嘗試初始化較小的權重。或者使用不同的方法來初始化權重,如Glorot (2010)He (2015)所解釋的。希望能幫助到你。

相關問題