2017-08-11 401 views
2

時,我是很新,keras我建立了一個簡單的網絡嘗試:Keras準確性我的模型始終爲0訓練

import numpy as np; 

from keras.models import Sequential; 
from keras.layers import Dense,Activation; 

data= np.genfromtxt("./kerastests/mydata.csv", delimiter=';') 
x_target=data[:,29] 
x_training=np.delete(data,6,axis=1) 
x_training=np.delete(x_training,28,axis=1) 

model=Sequential() 
model.add(Dense(20,activation='relu', input_dim=x_training.shape[1])) 
model.add(Dense(10,activation='relu')) 
model.add(Dense(1)); 

model.compile(optimizer='adam',loss='mean_squared_error',metrics=['accuracy']) 
model.fit(x_training, x_target) 

從我的源數據我已刪除了2列,你可以看到。一個是以字符串格式附帶日期的柱(在數據集旁邊,我有一個柱子,一個月另一個柱子和一年另一個柱子,所以我不需要那個柱子),另一個柱子是我用作柱子的柱子該模型的目標)。

當我訓練這個模型我得到這樣的輸出:

32/816 [>.............................] - ETA: 23s - loss: 13541942.0000 - acc: 0.0000e+00 
800/816 [============================>.] - ETA: 0s - loss: 11575466.0400 - acc: 0.0000e+00 
816/816 [==============================] - 1s - loss: 11536905.2353 - acc: 0.0000e+00  
Epoch 2/10 
32/816 [>.............................] - ETA: 0s - loss: 6794785.0000 - acc: 0.0000e+00 
816/816 [==============================] - 0s - loss: 5381360.4314 - acc: 0.0000e+00  
Epoch 3/10 
32/816 [>.............................] - ETA: 0s - loss: 6235184.0000 - acc: 0.0000e+00 
800/816 [============================>.] - ETA: 0s - loss: 5199512.8700 - acc: 0.0000e+00 
816/816 [==============================] - 0s - loss: 5192977.4216 - acc: 0.0000e+00  
Epoch 4/10 
32/816 [>.............................] - ETA: 0s - loss: 4680165.5000 - acc: 0.0000e+00 
736/816 [==========================>...] - ETA: 0s - loss: 5050110.3043 - acc: 0.0000e+00 
816/816 [==============================] - 0s - loss: 5168771.5490 - acc: 0.0000e+00  
Epoch 5/10 
32/816 [>.............................] - ETA: 0s - loss: 5932391.0000 - acc: 0.0000e+00 
768/816 [===========================>..] - ETA: 0s - loss: 5198882.9167 - acc: 0.0000e+00 
816/816 [==============================] - 0s - loss: 5159585.9020 - acc: 0.0000e+00  
Epoch 6/10 
32/816 [>.............................] - ETA: 0s - loss: 4488318.0000 - acc: 0.0000e+00 
768/816 [===========================>..] - ETA: 0s - loss: 5144843.8333 - acc: 0.0000e+00 
816/816 [==============================] - 0s - loss: 5151492.1765 - acc: 0.0000e+00  
Epoch 7/10 
32/816 [>.............................] - ETA: 0s - loss: 6920405.0000 - acc: 0.0000e+00 
800/816 [============================>.] - ETA: 0s - loss: 5139358.5000 - acc: 0.0000e+00 
816/816 [==============================] - 0s - loss: 5169839.2941 - acc: 0.0000e+00  
Epoch 8/10 
32/816 [>.............................] - ETA: 0s - loss: 3973038.7500 - acc: 0.0000e+00 
672/816 [=======================>......] - ETA: 0s - loss: 5183285.3690 - acc: 0.0000e+00 
816/816 [==============================] - 0s - loss: 5141417.0000 - acc: 0.0000e+00  
Epoch 9/10 
32/816 [>.............................] - ETA: 0s - loss: 4969548.5000 - acc: 0.0000e+00 
768/816 [===========================>..] - ETA: 0s - loss: 5126550.1667 - acc: 0.0000e+00 
816/816 [==============================] - 0s - loss: 5136524.5098 - acc: 0.0000e+00  
Epoch 10/10 
32/816 [>.............................] - ETA: 0s - loss: 6334703.5000 - acc: 0.0000e+00 
768/816 [===========================>..] - ETA: 0s - loss: 5197778.8229 - acc: 0.0000e+00 
816/816 [==============================] - 0s - loss: 5141391.2059 - acc: 0.0000e+00  

這究竟是爲什麼?我的數據是定時系列。我知道,對於定時系列,人們不會在意外使用密集神經元,但它只是一種測試。真正欺騙我的是精度始終爲0.而在其他測試中,我甚至損失了:獲得「NAN」值。

有人可以幫忙嗎?

乾杯。

回答

3

你的模式似乎對應於一個迴歸模型,原因如下:

  • 您正在使用linear(默認的)作爲輸出層的激活功能(在層和relu之前) 。您的損失是loss='mean_squared_error'

但是,您使用的度量標準-metrics=['accuracy']對應於分類問題。如果你想做迴歸,刪除metrics=['accuracy']。也就是說,使用

model.compile(optimizer='adam',loss='mean_squared_error') 

這裏是(從this blog post拍攝)keras指標迴歸和分類的列表:

Keras Regression Metrics

•Mean Squared Error: mean_squared_error, MSE or mse

•Mean Absolute Error: mean_absolute_error, MAE, mae

•Mean Absolute Percentage Error: mean_absolute_percentage_error, MAPE, mape

•Cosine Proximity: cosine_proximity, cosine

Keras Classification Metrics

•Binary Accuracy: binary_accuracy, acc

•Categorical Accuracy: categorical_accuracy, acc

•Sparse Categorical Accuracy: sparse_categorical_accuracy

•Top k Categorical Accuracy: top_k_categorical_accuracy (requires you specify a k parameter)

•Sparse Top k Categorical Accuracy: sparse_top_k_categorical_accuracy (requires you specify a k parameter)

+0

你爲什麼說我的輸出層使用RELU?從來源看來,如果你沒有指定任何東西,那麼就沒有激活功能。我錯過了什麼?另一方面,我只能在使用分類模型時使用「準確性」?我在這個時候有點搞砸:) – Notbad

+0

@Notbad默認激活函數確實看起來是線性的。我更新了我的答案。然而,這並沒有改變目前所寫的這個事實,該模型對應於一個迴歸問題。關於你的第二個問題,'準確性'確實只能用於分類(因爲它測量了正確標籤的百分比)。 –