Keras:训练和验证集上的 model.evaluate() 与上次训练时期后的 acc 和 val_acc 不同
Posted
技术标签:
【中文标题】Keras:训练和验证集上的 model.evaluate() 与上次训练时期后的 acc 和 val_acc 不同【英文标题】:Keras: model.evaluate() on training and val set differ from the acc and val_acc after last training epoch 【发布时间】:2020-03-25 20:33:21 【问题描述】:在最后一个训练时期之后,我得到这个输出:
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
这有什么意义?尽管测试模式,为什么model.evaluate()
函数存在参数batch_size
? https://keras.io/models/model/#evaluate
如果我已经批量训练了模型,是否还需要为测试模式定义批量大小?
【问题讨论】:
您的第二个问题在这里得到解答:***.com/questions/37911321/… 【参考方案1】:当然,首先,在进度条上的训练集中产生的任何度量/损失都被计算为训练批次的运行平均值,其中权重由于梯度下降而变化。这意味着训练指标永远不会与使用model.evaluate()
计算的指标相匹配,因为在这种情况下,权重是恒定的,不会发生变化。
关于验证指标,它们确实匹配,只是keras
进度条只打印了四个有效数字,而您打印了更多。
关于批量大小,我已经评论说基本上已经回答了here。 Keras 使用批处理是因为您无法一次对整个数据集进行预测,这可能会占用太多内存
【讨论】:
以上是关于Keras:训练和验证集上的 model.evaluate() 与上次训练时期后的 acc 和 val_acc 不同的主要内容,如果未能解决你的问题,请参考以下文章
Keras,训练期间验证集上的 auc 与 sklearn auc 不匹配
使用 pytorch 训练和测试 CNN。有和没有 model.eval()
为啥在同一数据集上使用 tensorflow 和 keras 重新训练的 Inception V3 显示出不同的准确性?