喀拉拉邦适合与评估之间的区别

时间:2018-12-23 18:53:01

标签: tensorflow keras deep-learning batch-normalization

我已经使用了100000个样本在Keras中训练通用模型并取得了良好的性能。然后,对于一个特定的样本,我想将训练后的权重用作初始化,并继续优化权重以进一步优化该特定样本的损失。

但是,出现了问题。首先,我很容易通过keras API加载训练后的权重,然后评估一个特定样本的损失,并且该损失接近模型训练期间的验证损失。我认为这很正常。但是,当我使用训练后的权重作为初始值并通过model.fit()进一步优化一个样本的权重时,损失确实很奇怪。它远高于评估结果,并在几个时期后逐渐恢复正常。

对于相同的简单对象并加载相同的模型权重,为什么model.fit()model.evaluate()返回不同的结果,我觉得很奇怪。我在模型中使用了批处理规范化层,我不知道这可能是原因。 model.evaluate()的结果似乎很正常,因为它与我之前在验证集中看到的结果很接近。

那么,导致拟合和评估不同的原因是什么?我该如何解决?

1 个答案:

答案 0 :(得分:0)

我认为您的核心问题是您在fitevaluate期间观察到两个不同的损耗值。 herehereherehere对此进行了广泛讨论。

fit()功能损失包括以下方面的贡献:

  1. 正则化器:训练期间将添加L1 / L2正则化损失,从而增加损失值
  2. 批处理规范变化:在批处理规范中,将收集批处理的运行平均值和方差,然后将这些统计信息用于执行标准化,而与批处理规范是否设置为可训练无关。有关更多讨论,请参见here
  3. 多批次:当然,训练损失将是多批次的平均值。因此,如果取前100个批次的平均值,而仅对第100个批次进行评估,结果将有所不同。

在进行评估时,只需进行正向传播即可获得损耗值,这里没有随机值。

最重要的是,您不应该比较训练损失和验证损失(或拟合和评估损失)。这些功能执行不同的操作。寻找其他指标来检查您的模型是否训练良好。