2016-05-10 61 views
5

我一直使用Keras從我的神經網絡獲得幾個NaN輸出。我每10,000個結果只得到一個NaN。最初我有一個relu活化層進入最終的softmax層。這產生了更多的NaN結果。我將憲法網絡中最後兩個密集層的激活函數從relu改爲sigmoid。這使問題更好,但我仍然得到NaN。對於我如何完全消除楠的任何建議?Keras Neural Nets,如何去除輸出中的NaN值?

model = Sequential() 
model.add(InputLayer((1, IMG_H, IMG_W))) 

model.add(Convolution2D(32, 3, 3, activation = 'relu')) 
model.add(Convolution2D(32, 3, 3, activation = 'relu')) 
model.add(MaxPooling2D(pool_size = (2, 2))) 

model.add(Dropout(0.3)) 

model.add(Convolution2D(64, 3, 3, activation = 'relu')) 
model.add(Convolution2D(64, 3, 3, activation = 'relu')) 
model.add(MaxPooling2D(pool_size = (2, 2))) 

model.add(Dropout(0.3)) 

model.add(Flatten()) 
model.add(Dense(256, activation = 'sigmoid')) 
model.add(Dropout(0.3)) 
model.add(Dense(64, activation = 'sigmoid')) 
model.add(Dropout(0.3)) 
model.add(Dense(categories, activation = 'softmax')) 
+1

你的輸出/損失中的NaN總是一個非常糟糕的信號。你是否預處理/標準化了你的輸入?你的學習率是否足夠小?如果數據正確預處理,NaN永遠不會發生。 [This](http://cs231n.github.io/neural-networks-2/)可能會有所幫助。 – sascha

+0

我規範化我的輸入1和0之間。我使用0.01和0.001之間的一個小的學習率。現在我正在增加體重正規化,看看是否有幫助。 – chasep255

+0

0-1之間的規範化不一定是你想要的。這聽起來像sklearn中的MinMax縮放器。你想在sklearn中標準化均值和差異aka StandardScaler。這在使用基於SGD的算法時非常重要!在你的情況下,平均值將是>> 0.0,我認爲你沒有改變方差。 – sascha

回答

2

看起來你已經解決了這個問題,但是爲了將來的參考是有nice question,其另外建議檢查是否有男的投入。