评估模型性能
为了评估模型性能,我们调用evaluate方法如下 −
loss_and_metrics = model.evaluate(X_test, Y_test, verbose=2)
为了评估模型性能,我们调用evaluate方法如下 −
loss_and_metrics = model.evaluate(X_test, Y_test, verbose=2)
我们将使用以下两个语句打印损失和准确率 −
print("Test Loss", loss_and_metrics[0]) print("Test Accuracy", loss_and_metrics[1])
运行上述语句时,您将看到以下输出 −
测试损失 0.08041584826191042 测试准确率 0.9837
这表明测试准确率为 98%,这对我们来说应该是可以接受的。这对我们来说意味着在 2% 的情况下,手写数字无法正确分类。我们还将绘制准确率和损失指标,以查看模型在测试数据上的表现。
绘制准确率指标
我们在训练期间使用记录的历史记录来获取准确率指标图。以下代码将绘制每个时期的准确率。我们选取训练数据准确率("acc")和验证数据准确率("val_acc")进行绘图。
plot.subplot(2,1,2) plot.plot(history.history['loss']) plot.plot(history.history['val_loss']) plot.title('model loss') plot.ylabel('loss') plot.xlabel('epoch') plot.legend(['train', 'test'], loc='upper right')
输出图如下所示 −
从图中可以看出,准确率在前两个时期迅速提高,这表明网络正在快速学习。随后,曲线趋于平缓,表明进一步训练模型不需要太多的周期。通常,如果训练数据准确率("acc")不断提高,而验证数据准确率("val_acc")却越来越差,则表明您遇到了过度拟合。这表明模型开始记忆数据。
我们还将绘制损失指标以检查模型的性能。
绘制损失指标
同样,我们绘制了训练("loss")和测试("val_loss")数据的损失。这是使用以下代码完成的 −
plot.subplot(2,1,2) plot.plot(history.history['loss']) plot.plot(history.history['val_loss']) plot.title('model loss') plot.ylabel('loss') plot.xlabel('epoch') plot.legend(['train', 'test'], loc='upper right')
此代码的输出如下所示 −
正如您在图中看到的,训练集上的损失在前两个时期迅速下降。对于测试集,损失不会以与训练集相同的速度下降,而是在多个时期内几乎保持平稳。这意味着我们的模型可以很好地推广到未见过的数据。
现在,我们将使用经过训练的模型来预测测试数据中的数字。