1. 程式人生 > >caffe + python + float 產生 Inf ,從而觸發NaN

caffe + python + float 產生 Inf ,從而觸發NaN

損失函式在訓練過程中,如果在剛開始的迭代過程中損失函式就發散變為了Inf 或者NaN,那麼往往可以通過調節學習率來解決。

另外一種情況是在迭代了數千次,例如我迭代了1800次,忽然出現損失函式為Inf或者NaN的情況,在我的實驗情況下是由於caffe的python介面使用的是單精度float型別,在自己用python定義的層中,使用到了指數函式np.exp(a),當a的 值超過某個數時例如90,使用單精度無法表示,就產生了Inf值。解決方法是在自己定義的python層中將bottom[0].data或者其他都轉化為double型別然後再操作。

後續… 對於一些數值(如e^90),雖然能夠利用雙精度表示了,但是再進一步的迭代過程中出現了更大的資料,例如(e^710) ,即上一層產生的啟用值大於710,導致 e^710 會產生溢位。現在問題還未解決….