Keras:训练和val集的model.evaluate()与上次训练时期之后的acc和val_acc不同

时间:2019-11-30 17:11:19

标签: python machine-learning keras

最后一次训练之后,我得到以下输出:

Epoch 100/100
89254/89254 - 24s - loss: 0.1935 - acc: 0.9281 - val_loss: 0.2182 - val_acc: 0.9219

但是问题是,一旦我对训练数据和验证数据进行model.evaluate(),我将得到不同的结果:

Train accuracy: 0.929661
Validation accuracy: 0.921859

这有什么意义?为什么在测试模式下,batch_size函数仍存在参数model.evaluate()https://keras.io/models/model/#evaluate 如果我已经批量训练了模型,是否还需要为测试模式定义批量大小?

1 个答案:

答案 0 :(得分:3)

当然,有道理的是,开始时,进度条上的训练集中产生的任何度量标准/损失都将作为训练批次中的运行平均值进行计算,其中权重由于梯度下降而变化。这意味着训练指标将永远不会与用model.evaluate()计算的指标匹配,因为在这种情况下权重是不变的且不会改变。

关于验证指标,它们确实匹配,只是keras进度栏仅打印四个有效数字,而您打印了更多的数字。

关于批量大小,我已经评论说,基本上已经回答了here。 Keras使用批处理,因为您无法一次对整个数据集进行预测,这可能会占用过多的内存