web-dev-qa-db-fra.com

Précision Keras pour mon modèle toujours 0 lors de l'entraînement

Je suis assez nouveau dans les keras, j'ai construit un réseau simple pour essayer:

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)

De mes données source, j'ai supprimé 2 colonnes comme vous pouvez le voir. L'une est une colonne qui est venue avec une date au format chaîne (dans l'ensemble de données à côté, j'ai une colonne pour le jour, une autre pour le mois et une autre pour l'année, donc je n'ai pas besoin de cette colonne) et l'autre colonne est la colonne que j'utilise comme cible pour le modèle).

Lorsque je forme ce modèle, j'obtiens cette sortie:

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    

Pourquoi cela arrive-t-il? Mes données sont une série chronométrée. Je sais que pour les séries chronométrées, les gens n'utilisent généralement pas de neurones denses, mais ce n'est qu'un test. Ce qui me trompe vraiment, c'est que la précision est toujours de 0. Et avec d'autres tests, j'ai même perdu: obtient une valeur "NAN".

Quelqu'un pourrait-il aider ici?

À votre santé.

17
Notbad

Votre modèle semble correspondre à un modèle de régression pour les raisons suivantes:

  • Vous utilisez linear (la valeur par défaut) comme fonction d'activation dans la couche de sortie (et relu dans la couche précédente).

  • Votre perte est loss='mean_squared_error'.

Cependant, la métrique que vous utilisez- metrics=['accuracy'] correspond à un problème de classification. Si vous souhaitez effectuer une régression, supprimez metrics=['accuracy']. Autrement dit, utilisez

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

Voici une liste de métriques de kéros pour la régression et la classification (tirée de ce billet de blog ):

Mesures de régression Keras

• Erreur quadratique moyenne: mean_squared_error, MSE ou mse

• Erreur absolue moyenne: mean_absolute_error, MAE, mae

• Erreur moyenne absolue en pourcentage: mean_absolute_percentage_error, MAPE, mape

• Proximité cosinus: proximité cosinus, cosinus

Mesures de classification Keras

• Précision binaire: binary_accuracy, acc

• Précision catégorique: categorical_accuracy, acc

• Précision catégorique éparse: sparse_categorical_accuracy

• Précision catégorique k supérieure: top_k_categorical_accuracy (vous devez spécifier un paramètre k)

• Précision catégorique top k clairsemée: sparse_top_k_categorical_accuracy (nécessite de spécifier un paramètre k)

35
Miriam Farber

Ajoutez les éléments suivants pour obtenir des statistiques:

   history = model.compile(optimizer='adam', loss='mean_squared_error', metrics=['mean_squared_error'])
   # OR
   history = model.compile(optimizer='adam', loss='mean_absolute_error', metrics=['mean_absolute_error'])
   history.history.keys()
   history.history
1
itsergiu