Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Zero accuracy training a neural network in Keras

Tags:

I train a Neural Network of Regression Problem in Keras. Why the output is only one Dimension, the accuracy in each Epoch always show acc: 0.0000e+00?

like this:

1000/199873 [..............................] - ETA: 5s - loss: 0.0057 - acc: 0.0000e+00

2000/199873 [..............................] - ETA: 4s - loss: 0.0058 - acc: 0.0000e+00

3000/199873 [..............................] - ETA: 3s - loss: 0.0057 - acc: 0.0000e+00

4000/199873 [..............................] - ETA: 3s - loss: 0.0060 - acc: 0.0000e+00 ...

198000/199873 [============================>.] - ETA: 0s - loss: 0.0055 - acc: 0.0000e+00

199000/199873 [============================>.] - ETA: 0s - loss: 0.0055 - acc: 0.0000e+00

199873/199873 [==============================] - 4s - loss: 0.0055 - acc: 0.0000e+00 - val_loss: 0.0180 - val_acc: 0.0000e+00

Epoch 50/50

But if the output are two Dimension or above, no problem for accuracy.

My model as below:`

input_dim = 14 batch_size = 1000 nb_epoch = 50 lrelu = LeakyReLU(alpha = 0.1)  model = Sequential() model.add(Dense(126, input_dim=input_dim)) #Dense(output_dim(also hidden wight), input_dim = input_dim) model.add(lrelu) #Activation  model.add(Dense(252)) model.add(lrelu) model.add(Dense(1)) model.add(Activation('linear'))  model.compile(loss= 'mean_squared_error', optimizer='Adam', metrics=['accuracy']) model.summary() history = model.fit(X_train_1, y_train_1[:,0:1],                     batch_size=batch_size,                     nb_epoch=nb_epoch,                     verbose=1,                     validation_split=0.2)  loss = history.history.get('loss') acc = history.history.get('acc') val_loss = history.history.get('val_loss') val_acc = history.history.get('val_acc')  '''saving model''' from keras.models import load_model model.save('XXXXX') del model  '''loading model''' model = load_model('XXXXX')  '''prediction''' pred = model.predict(X_train_1, batch_size, verbose=1) ans = [np.argmax(r) for r in y_train_1[:,0:1]] 
like image 705
soartseng Avatar asked Jan 24 '17 03:01

soartseng


People also ask

How does keras calculate training accuracy?

Accuracy calculates the percentage of predicted values (yPred) that match with actual values (yTrue). For a record, if the predicted value is equal to the actual value, it is considered accurate. We then calculate Accuracy by dividing the number of accurately predicted records by the total number of records.

What is accuracy metric in keras?

metrics. Accuracy(name="accuracy", dtype=None) Calculates how often predictions equal labels. This metric creates two local variables, total and count that are used to compute the frequency with which y_pred matches y_true .


1 Answers

The problem is that your final model output has a linear activation, making the model a regression, not a classification problem. "Accuracy" is defined when the model classifies data correctly according to class, but "accuracy" is effectively not defined for a regression problem, due to its continuous property.

Either get rid of accuracy as a metric and switch over to fully regression, or make your problem into a classification problem, using loss='categorical_crossentropy' and activation='softmax'.

This is a similar problem to yours: Link

For more information see: StackExchange

like image 97
mikal94305 Avatar answered Sep 23 '22 05:09

mikal94305