2016-12-14 17 views
0

我在學keras,而且我的任務很簡單。使用數據中的3個變量來預測另一個var值,它可以在R/Python ANN模型上正常工作。但是當我嘗試使用keras來構建一個神經網絡時,它無法以0的精度工作。 的代碼,使用keras構建一個簡單的ANN,但得到0的準確性

from keras.models import Sequential 
from keras.layers import Dense, Activation 
import pandas as pd 
from sklearn.cross_validation import train_test_split 

data = pd.read_csv(datapath) 
data = data.dropna() 

x = data.values[:, [2, 9, 10]] 
y = data.values[:, 8] 
train_X, test_X, train_y, test_y = train_test_split(x, y, train_size=0.5, random_state=0) 

model = Sequential() 
model.add(Dense(16, input_shape=(3,))) 
model.add(Activation('sigmoid')) 
model.add(Dense(1)) 
model.add(Activation('linear')) 

model.compile(optimizer='sgd', loss='mean_squared_error', metrics=['accuracy']) 

model.fit(train_X, train_y, nb_epoch=100, batch_size=32, verbose=0) 
loss, accuracy = model.evaluate(test_X, test_y, verbose=0) 
print("Accuracy = {:.2f}".format(accuracy)) 

所以,我的問題是,是我的代碼的權利,以及如何使其工作?

+0

嘗試使用* keras.callbacks.TensorBoard *來調試您的模型。 –

回答

0

如果您嘗試預測實數值,您可能不會對專門用於分類的精度感興趣。我建議用你正在使用的損失來衡量訓練進度:均方誤差。

如果要監視培訓進度,可以將關鍵字validation_data = [X_val,y_val]傳遞給fit方法。

否則,要測量的測試設置的預測誤差僅僅使用scikit學習功能http://scikit-learn.org/stable/modules/generated/sklearn.metrics.mean_squared_error.html

更新 一個與其他產品進行差異可能是權重的初始化。使用密集圖層的初始化參數或初始化的比例可能會對您有所幫助。

+0

謝謝你的回答。我之前嘗試過使用mse,但得到了非常大的錯誤,而其他ANN模型中的mse很小。然後我檢查了keras模型預測的值,該輸出矢量中的數字看起來都一樣。所以,我想知道我的代碼或我的方法有什麼問題嗎? – GemOfRoe

+0

看看我的初始化更新。它對你有幫助嗎? – bn2nkm

相關問題