2016-06-10 95 views
1

我正在訓練一個神經網絡做迴歸,(1個輸入和1個輸出)。我們的xy分別是通常的輸入和輸出數據集。Keras擬合忽略nan值

我的問題是,y數據集(而不是x)有一些值設置爲nan,所以擬合到nan。我想知道是否有一個選項可以忽略擬閤中的nan值,類似於numpy函數np.nanmean來計算忽略nans的平均值等等。

如果該選項不存在,我想我會找到NaN值並手動刪除它們,,並在同一時間擦除對應楠位置yx值。

x  y 
2  4 
3  2 
4  np.nan 
5  7 
6  np.nan 
7  np.nan 

在這個簡單的例子在y列中的NaN值應被刪除,並在同一時間在x列中的相應的值(4,6,7)。

謝謝。

編輯:好吧,我有一個問題過濾NaN的,我做的:

for index, x in np.ndenumerate(a): 
    if x == np.nan: 
     print index, x 

,它不顯示任何信息,我相信有NaN值...

EDIT(SELF回答):好吧,我已經找到一種方法,以本地化的NaN:

for index, x in np.ndenumerate(a): 
     if x != x: 
      print index, x 
+1

NAN真的有關聯嗎?否則,只需從訓練數據中移除它們或將它們映射到特定的常量(如0或-1)。方式更容易,但結果與您的建議相同。 – runDOSrun

+0

是的,我在想,但是應該在兩列中刪除這些值,所以你必須在陣列中找到nans的位置,然後擦除它們。然後你將不得不在x列中找到相應的位置並刪除它們。 – David

+0

我沒有看到問題?如果你在y的第n行找到NAN,你也可以在x的第n行刪除它。 – runDOSrun

回答

2

正如評論,說SIMPL y刪除nan作爲預處理步驟:

import numpy as np 

x = range(2,8) 
y = [4,2,np.nan,7,np.nan,np.nan] 

for a,b in zip(x,y): 
    if str(b) == 'nan': 
     x.remove(a) 
     y.remove(b) 

print x,y 

產生[2, 3, 5] [4, 2, 7]

如果你使用一些工具來預處理它給你的np.nan數據,檢查是否API允許你禁用此行爲,並採取一分鐘考慮這是否是真的想要的行爲(或者,如果例如,你想把它映射爲常量,因爲你發現你的輸入是有價值的,即使它們沒有標籤)。