我已经使用了100000个样本在Keras中训练通用模型并取得了良好的性能。然后,对于一个特定的样本,我想将训练后的权重用作初始化,并继续优化权重以进一步优化该特定样本的损失。
但是,出现了问题。首先,我很容易通过keras API加载训练后的权重,然后评估一个特定样本的损失,并且该损失接近模型训练期间的验证损失。我认为这很正常。但是,当我使用训练后的权重作为初始值并通过model.fit()
进一步优化一个样本的权重时,损失确实很奇怪。它远高于评估结果,并在几个时期后逐渐恢复正常。
对于相同的简单对象并加载相同的模型权重,为什么model.fit()
和model.evaluate()
返回不同的结果,我觉得很奇怪。我在模型中使用了批处理规范化层,我不知道这可能是原因。 model.evaluate()
的结果似乎很正常,因为它与我之前在验证集中看到的结果很接近。
那么,导致拟合和评估不同的原因是什么?我该如何解决?
答案 0 :(得分:0)
我认为您的核心问题是您在fit
和evaluate
期间观察到两个不同的损耗值。 here,here,here和here对此进行了广泛讨论。
fit()
功能损失包括以下方面的贡献:
在进行评估时,只需进行正向传播即可获得损耗值,这里没有随机值。
最重要的是,您不应该比较训练损失和验证损失(或拟合和评估损失)。这些功能执行不同的操作。寻找其他指标来检查您的模型是否训练良好。