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

时间:2018-02-23 19:10:54

标签: python tensorflow machine-learning keras

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

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

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

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

1 个答案:

答案 0 :(得分:0)

  

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

一般来说是的,但这也取决于您的verbose参数;如果它设置为2,那么每个时期将获得一行,但如果将其设置为1,您将获得进度条< / em>提供有关每个批次和其他内容的信息。

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

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

问题是model.evaluate()方法按批次进行计算,如docs中所述。两个重要的参数是batch_size,即每个评估步骤的样本数,以及steps,它们是完成评估的步骤数(批次)。

model.evaluate()的源代码上挖掘一下,我们可以看到它平均损失以及批量大小的stepsnum_samples返回的其他指标

这意味着如果您只传递一个样本,您获得的结果将除以1(并获得更高的值),而如果您提供更多样本(如您的测试数据),结果将按平均值大于1的数字,从而获得更小的&#34;值比用较少样本给出的值。