Keras: 在训练和验证集上使用model.evaluate()的结果与最后一个训练周期后的acc和val_acc不同

在最后一个训练周期结束后,我得到了以下输出:

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

但问题是,一旦我在训练数据和验证数据上使用model.evaluate(),我得到了不同的结果:

Train accuracy: 0.929661Validation accuracy: 0.921859

这怎么解释呢?为什么在测试模式下model.evaluate()函数中还存在batch_size参数? https://keras.io/models/model/#evaluate如果我已经以批次的方式训练了模型,是否也需要在测试模式下定义批次大小呢?


回答:

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

关于验证指标,它们确实是匹配的,只是keras的进度条只显示了四位有效数字,而你显示了更多位数。

关于批次大小,我已经评论过这个问题基本上在这里已经得到了回答 这里。Keras使用批次是因为你不能一次对整个数据集进行预测,那样可能会消耗太多内存

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注