我搜索了很多答案,但却找不到令人满意的答案。
如果我理解正确,在model.fit()
期间,Keras会将最后一批的损失打印到终端。
如果我在训练集上调用model.evaluate()
,我会得到整个集合的损失值。
因此,直观地说,如果我在训练集的单个实例上调用model.evaluate()
,我应该得到一个值,该值是我在整个训练集上调用model.evaluate()
的值的一小部分。但相反,我得到的值接近甚至更大~10倍。知道为什么吗?
答案 0 :(得分:0)
如果我理解正确,在model.fit()期间,Keras会将最后一批的损失打印到终端。
一般来说是的,但这也取决于您的verbose
参数;如果它设置为2
,那么每个时期将获得一行,但如果将其设置为1
,您将获得进度条< / em>提供有关每个批次和其他内容的信息。
这也会打印您在模型中包含的任何其他指标(如准确性,MSE等)。
现在,我认为你期望的直观行为并不完全正确。首先,我必须说这还取决于您的具体模型和架构,因为Dropout Layers等某些功能可能会有自己的特定交互,可能会改变您的损失和指标的结果。
问题是model.evaluate()
方法按批次进行计算,如docs中所述。两个重要的参数是batch_size
,即每个评估步骤的样本数,以及steps
,它们是完成评估的步骤数(批次)。
在model.evaluate()
的源代码上挖掘一下,我们可以看到它平均损失以及批量大小的steps
或num_samples
返回的其他指标。
这意味着如果您只传递一个样本,您获得的结果将除以1
(并获得更高的值),而如果您提供更多样本(如您的测试数据),结果将按平均值大于1
的数字,从而获得更小的&#34;值比用较少样本给出的值。