应该在使用model.load_weights()之前运行model.compile(),如果模型只是略有改变,请说丢失?

时间:2018-05-16 09:47:04

标签: python keras deep-learning

通过培训和培训通过数据集验证近24个时期,间歇性地一次8个时期,并在每个时间间隔后累积保存权重。

我发现火车不断下降&前16个时期的测试损失,其中训练损失继续下降而测试损失上升所以我认为是过度拟合的情况。

我试图恢复训练,在16个时期之后保存的权重与超参数的变化说增加dropout_rate 一点。 因此,我重新认识了密集的&具有新丢失的转换块以获得具有相同序列的相同架构&可学习的参数计数。

现在,当我使用 model.load_weights()之后编译时,将以前的权重分配给我的新模型(带有新的退出)。 我看到训练损失甚至更高,应该是最初的(显然在训练期间随机节点的不活动性增加)但后来它的表现也非常不令人满意, 所以我怀疑在加载预训练重量后可能编译可能会破坏性能?

什么是推理& model.load_weights()&的推荐序列的 model.compile()?我非常感谢对上述案例的任何见解。

1 个答案:

答案 0 :(得分:1)

model.compile()方法不会以任何方式触及权重。

其目的是创建一个符号函数,将损失和优化器添加到模型的现有函数中。

您可以根据需要随时编辑模型,并且您的权重将保持不变。

编译的可能后果

如果你有一个模型,训练有素的时代,它的优化器(取决于你为它选择的类型和参数)也将针对特定的时期进行训练。

编译将使您失去训练有素的优化器,并且由于学习速率不适合模型的当前状态,您的第一批培训批次可能会遇到一些不良结果。

除此之外,编译不会造成任何伤害。