使用 Keras 评估模型时的测试分数与测试准确度

Posted

技术标签:

【中文标题】使用 Keras 评估模型时的测试分数与测试准确度【英文标题】:Test score vs test accuracy when evaluating model using Keras 【发布时间】:2017-09-21 05:43:22 【问题描述】:

我使用的是通过 Keras 库实现的神经网络,下面是训练期间的结果。最后,它会打印出测试分数和测试准确度。我无法确切地弄清楚分数代表什么,但我认为准确度是运行测试时正确的预测数量。

Epoch 1/15 1200/1200 [===============================] - 4s - 损失: 0.6815 - acc: 0.5550 - val_loss: 0.6120 - val_acc: 0.7525

Epoch 2/15 1200/1200 [==============================] - 3s - 损失: 0.5481 - acc: 0.7250 - val_loss: 0.4645 - val_acc: 0.8025

Epoch 3/15 1200/1200 [===============================] - 3s - 损失: 0.5078 - acc: 0.7558 - val_loss: 0.4354 - val_acc: 0.7975

Epoch 4/15 1200/1200 [===============================] - 3s - 损失: 0.4603 - acc: 0.7875 - val_loss: 0.3978 - val_acc: 0.8350

Epoch 5/15 1200/1200 [==============================] - 3s - 损失: 0.4367 - acc: 0.7992 - val_loss: 0.3809 - val_acc: 0.8300

Epoch 6/15 1200/1200 [===============================] - 3s - 损失: 0.4276 - acc: 0.8017 - val_loss: 0.3884 - val_acc: 0.8350

纪元 7/15 1200/1200 [===============================] - 3s - 损失: 0.3975 - acc: 0.8167 - val_loss: 0.3666 - val_acc: 0.8400

Epoch 8/15 1200/1200 [==============================] - 3s - 损失: 0.3916 - acc: 0.8183 - val_loss: 0.3753 - val_acc: 0.8450

纪元 9/15 1200/1200 [==============================] - 3s - 损失: 0.3814 - acc: 0.8233 - val_loss: 0.3505 - val_acc: 0.8475

Epoch 10/15 1200/1200 [==============================] - 3s - 损失: 0.3842 - acc: 0.8342 - val_loss: 0.3672 - val_acc: 0.8450

Epoch 11/15 1200/1200 [==============================] - 3s - 损失: 0.3674 - acc: 0.8375 - val_loss: 0.3383 - val_acc: 0.8525

Epoch 12/15 1200/1200 [==============================] - 3s - 损失: 0.3624 - acc: 0.8367 - val_loss: 0.3423 - val_acc: 0.8650

Epoch 13/15 1200/1200 [===============================] - 3s - 损失: 0.3497 - acc: 0.8475 - val_loss: 0.3069 - val_acc: 0.8825

Epoch 14/15 1200/1200 [===============================] - 3s - 损失: 0.3406 - acc: 0.8500 - val_loss: 0.2993 - val_acc: 0.8775

Epoch 15/15 1200/1200 [==============================] - 3s - 损失: 0.3252 - acc: 0.8600 - val_loss: 0.2960 - val_acc: 0.8775

400/400 [==============================] - 0s

测试分数:0.299598811865

测试精度:0.88

看着Keras documentation,我还是不明白分数是什么。对于评估函数,它说:

返回测试模式下模型的损失值和指标值。

我注意到一点,测试准确率越低,分数越高,准确率越高,分数越低。

【问题讨论】:

你的keras版本是多少?能提供代码吗? @maz 我正在使用 Keras 2.0.3,我正在试验的代码是这样的:github.com/fchollet/keras/blob/master/examples/imdb_lstm.py 请在此处查看类似问题的答案***.com/a/57645003/2851685 【参考方案1】:

供参考,代码的两个相关部分:

model.compile(loss='binary_crossentropy',
              optimizer='adam',
              metrics=['accuracy'])

score, acc = model.evaluate(x_test, y_test,
                            batch_size=batch_size)
print('Test score:', score)
print('Test accuracy:', acc)

分数是对给定输入的损失函数的评估。

训练网络是寻找最小化损失函数(或成本函数)的参数。

这里的代价函数是binary_crossentropy

对于一个目标T和一个网络输出O,二元交叉熵可以定义为

f(T,O) = -(T*log(O) + (1-T)*log(1-O) )

所以你看到的分数就是对它的评价。

如果你给它输入一批输入,它很可能会返回平均损失。

是的,如果您的模型具有较低的损失(在测试时),它通常应该具有较低的预测误差。

【讨论】:

你也可以这样做score, acc = model.evaluate(x, y, verbose = 0) 这样它不会重印时代【参考方案2】:

在训练过程中经常使用损失来为您的模型找到“最佳”参数值(例如神经网络中的权重)。这是您在训练中尝试通过更新权重来优化的内容。

准确性更多来自应用的角度。找到上述优化参数后,您可以使用此指标来评估模型的预测与真实数据相比的准确度。

此答案提供了详细信息:

How to interpret "loss" and "accuracy" for a machine learning model

【讨论】:

以上是关于使用 Keras 评估模型时的测试分数与测试准确度的主要内容,如果未能解决你的问题,请参考以下文章

CNN keras 中图像的混淆矩阵

keras训练完模型,为啥对训练集进行evaluate和训练时的loss完全不一样?白训练了吗?

从 Keras model.predict_generator 计算准确率

相同 Keras 模型和数据的准确度低于 AUC [关闭]

测试准确度分数高于 GridSearchCV 中的最佳分数

Keras:模型评估