2017-12-27 352 views
2

当我开始训练模型时,以前没有保存模型。我可以安全地使用model.compile()。我现在已将该模型保存在h5文件中,以便使用checkpoint进行进一步培训。model.compile()初始化Keras(tensorflow后端)中的所有权重和偏差吗?

说,我想进一步训练模型。我很困惑,我可以在这里使用model.compile()吗?并且应该在model = load_model()声明之前还是之后?如果model.compile()重新初始化所有的权重和偏见,我应该在model = load_model()声明之前。

发现一些讨论后,在我看来model.compile()只有当我没有保存以前的模型时才需要。一旦我保存了模型,就不需要使用model.compile()。这是真的还是假的?当我想预测使用训练好的模型时,我应该在预测之前使用model.compile()吗?

回答

2

何时使用?

如果你使用compile,想必一定是load_model()后。毕竟,你需要一个模型来编译。

compile是做什么用的?

编译定义损失函数,所述优化度量。就这样。

它与权重无关,您可以根据需要多次编译模型,而不会导致任何问题进行预训练。

您需要一个编译模型来火车(因为训练使用损失函数和优化器)。但没有必要编译一个预测模型。

您是否需要使用多次编译?

只有:

  • 你想改变其中的一个:
    • 损失函数
    • 优化
    • 指标
  • 您加载(或创建)一个尚未编译的模型。或者你的加载/保存方法不考虑以前的编译。

后果再次编译:

如果再次编译一个模式,你将失去优化状态

这意味着你的训练在开始时会受到一点影响,直到它调整了学习速率,动量等等。但是对权重绝对没有损害(除非你的初始学习速度如此之大第一个训练步骤会大幅改变微调的权重)。