Search code examples
pythonkerasevaluate

Model Evaluate in Keras


I am training a model to perform a binary classification through Keras. After my model is trained, I tried evaluate it, like this:

# Evaluate the model
print('Evaluate on test data')
loss, acc = model.evaluate(X_test, y_test, verbose=2)
print('Test loss: %.4f' % loss)
print('Test accuracy: %.4f' % acc)

And I got this result:

Evaluate on test data
116/1 - 0s - loss: 0.3099 - accuracy: 0.8793
Test loss: 0.2802
Test accuracy: 0.8793

My question is, why the loss values reported are different? i.e, 0.3099 and 0.2802? Is this some kind of bug? Or am I missing something here?


Solution

  • No, it's not a bug, it makes sense once you are aware how both numbers are computed. Since you set verbose=2 in your model.evaluate call, it shows the progress of batches over the test set.

    The accuracy and loss displayed in the progress bar are a exponentially average over batches, as to ease visualization. The loss and accuracy you get as return from model.evaluate is the total loss/accuracy averaged over batches, and are the numbers you should consider as final and correct.