【问题标题】:Keras: model.evaluate() on training and val set differ from the acc and val_acc after last training epochKeras:训练和验证集上的 model.evaluate() 与上次训练时期后的 acc 和 val_acc 不同
【发布时间】: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_sizehttps://keras.io/models/model/#evaluate 如果我已经批量训练了模型,是否还需要为测试模式定义批量大小?

【问题讨论】:

标签: python machine-learning keras


【解决方案1】:

当然,首先,在进度条上的训练集中产生的任何度量/损失都被计算为训练批次的运行平均值,其中权重由于梯度下降而变化。这意味着训练指标永远不会与使用model.evaluate() 计算的指标相匹配,因为在这种情况下,权重是恒定的,不会发生变化。

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

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

【讨论】:

    猜你喜欢
    • 2019-12-14
    • 1970-01-01
    • 2019-02-13
    • 2018-12-19
    • 2021-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-23
    相关资源
    最近更新 更多