如何解释 model.evaluate() 返回的损失值?

我搜索了很多答案,但没有找到一个让我满意的。

如果我理解正确的话,在 model.fit() 过程中,Keras 会将最后一个批次的损失值打印到终端。

如果我在训练集上调用 model.evaluate(),我会得到整个集合的损失值。

所以,直觉上,如果我在训练集的一个单一实例上调用 model.evaluate(),我应该得到一个值,这个值是调用 model.evaluate() 在整个训练集上得到的值的一小部分。但实际上,我得到的值接近甚至大了约10倍。为什么会这样呢?


回答:

如果我理解正确的话,在 model.fit() 过程中,Keras 会将最后一个批次的损失值打印到终端。

一般来说是的,但这也取决于你的 verbose 参数;如果设置为 2,你会得到每轮一行的输出,但如果你设置为 1,你会得到一个进度条,显示每个批次和其他信息的详细情况。

这也会打印你模型中包含的其他指标(如准确率、均方误差等)。


现在,我认为你期望的直觉行为并不完全正确。首先,我必须说这也取决于你的具体模型和架构,因为一些特性如 Dropout 层可能会有自己的特定交互,可能会改变你的损失和指标的结果。

关键是,model.evaluate() 方法是以批次方式进行计算的,正如文档中所指定的。两个重要的参数是 batch_size,即每次评估步骤的样本数,以及 steps,即完成评估所需的步骤(批次)数。

深入研究 model.evaluate() 的源代码,我们可以看到它会平均stepsnum_samples 返回的批次大小损失和其他指标。

这意味着如果你只传递一个样本,你得到的结果将被除以 1(因此得到更高的值),而如果你提供更多样本(如你的测试数据),结果将被大于 1 的数字平均,从而得到比使用较少样本时更“小”的值。

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中创建了一个多类分类项目。该项目可以对…

发表回复

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