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

标签 python tensorflow machine-learning keras

我搜索了很多答案,但未能找到令人满意的答案。

如果我理解正确,在 model.fit() 期间,Keras 将最后一批的损失打印到终端。

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

因此,凭直觉,如果我在训练集的单个实例上调用 model.evaluate(),我得到的值应该是调用 model 时得到的值的一小部分。 evaluate() 在整个训练集上。但相反,我得到了一个接近甚至更大 ~10 倍的值。知道为什么吗?

最佳答案

If I understood correctly, during model.fit(), Keras prints the loss for the last batch to terminal.

一般来说是的,但这也取决于你的verbose参数;如果它设置为 2,你将得到 每个纪元一行,但如果你将它设置为 1,你将得到一个进度条 提供每批处理和其他信息的信息。

这还会打印您包含在模型中的任何其他指标(例如准确性、MSE 等)。


现在,我认为您所期望的直观行为不太正确。首先,我必须说这也将取决于您的特定模型和架构,因为像 Dropout Layers 这样的一些功能可能有自己特定的交互,这可能会改变您的损失和指标的结果。

问题是 model.evaluate() 方法按照 docs 中的规定批量 进行计算.两个重要的参数是 batch_sizesteps,前者是每个评估步骤的样本数,后者是完成评估的步骤数(批处理)。

深入研究model.evaluate() 的源代码,我们可以看到它对steps 返回的损失和其他指标求平均。或 num_samples你的批量大小

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

关于python - 如何解释 model.evaluate() 返回的损失?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48954694/

相关文章:

tensorflow - 如何在 Keras 中使用函数式 API 在快捷连接中添加卷积层?

javascript - 如何从 tensorflow.js 下载模型和权重

python - tf.estimator shuffle - 随机种子?

python-2.7 - 如何在 Anaconda Jupyter 笔记本和 Python 2.7 上开始 Udacity 的机器学习类(class)?

python - S4 对象中的属性装饰器 (R)

python - 使用 apache 和 mod_wsgi 的 Flask hello world 仅在 webroot 中显示文件

python - 如何在python中添加列表的总和

python - 在 Python 中使用 Mailgun 发送多个文件附件

machine-learning - Keras 模型评估中的损失

machine-learning - 如何在 MLPClassifier 上实现拒绝