当我开始训练模型时,之前没有保存模型。我可以安全地使用model.compile()
。我现在已将模型保存在h5
文件中,以便使用checkpoint
进行进一步培训。
说,我想进一步训练模型。我现在很困惑:我可以在这里使用model.compile()
吗?它应该放在model = load_model()
声明之前还是之后?如果model.compile()
重新初始化所有权重和偏见,我应该将它放在model = load_model()
语句之前。
在发现一些讨论之后,在我看来,只有在我之前没有保存模型时才需要model.compile()
。保存模型后,无需使用model.compile()
。这是真是假?当我想使用训练模型预测时,我应该在预测之前使用model.compile()
吗?
答案 0 :(得分:50)
何时使用?
如果您正在使用compile
,肯定必须在load_model()
之后。毕竟,你需要一个模型来编译。
compile
做什么?
编译定义损失功能,优化器和指标。就这样。
它与权重无关,您可以根据需要多次编译模型,而不会对预训练的权重造成任何问题。
您需要一个已编译的模型来训练(因为训练使用了损失函数和优化器)。但是没有必要编译预测模型。
您是否需要多次使用编译?
仅限于:
再次编译的后果:
如果再次编译模型,则会丢失优化程序状态。
这意味着你的训练在开始时会受到一点点影响,直到它调整学习速度,动力等等。但是对于重量绝对没有损害(当然,除非你的初始学习率如此之大,第一个训练步骤大大改变了微调重量)。
答案 1 :(得分:6)
别忘了,您还需要在更改图层的trainable
标志(例如,当您想要微调这样的模型时:
# load VGG model without top classifier
# freeze all the layers (i.e. `trainable = False`)
# add some layers to the top
# compile and train the model on some data
# un-freeze some of the layers of VGG by setting `trainable = True`
# compile the model again <-- DON'T FORGET THIS STEP!
# train the model on some data