我搜索了很多答案,但未能找到令人满意的答案。
如果我理解正确,在 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_size
和 steps
,前者是每个评估步骤的样本数,后者是完成评估的步骤数(批处理)。
深入研究model.evaluate()
的源代码,我们可以看到它对steps
返回的损失和其他指标求平均。或 num_samples
你的批量大小。
这意味着如果你只传递一个样本,你得到的结果将除以 1
(并得到更高的值),而如果你提供更多样本(比如你的测试数据),结果将由大于 1
的数字进行平均,从而获得比用较少样本给出的值“更小”的值。
关于python - 如何解释 model.evaluate() 返回的损失?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48954694/