什么时候使用?
如果您使用的是compile
,则肯定是在load_model()
。毕竟,您需要一个模型进行编译。 (PS: load_model
与模型一起保存的优化器自动编译模型)
compile
做什么?
编译定义损失函数 , 优化器和度量 。就这样。
它与权重无关,您可以根据需要多次编译模型,而不会对预训练权重造成任何问题。
您需要一个经过编译的模型来进行训练 (因为训练使用损失函数和优化器)。但是没有必要为预测而编译模型。
您是否需要多次使用编译?
除非:
- 您要更改其中之一:
- 损失函数
- 优化器/学习率
- 指标
- 某一层的
trainable
属性
- 您加载(或创建)了尚未编译的模型。或者您的加载/保存方法没有考虑以前的编译。
再次编译的后果:
如果再次编译模型,则会丢失优化器状态 。
这意味着您的训练在开始时会受到一点影响,直到调整学习率,动量等为止。但是绝对不会对重量造成损害(除非您的初始学习率如此之大,以至于第一次训练步骤会疯狂地更改微调的权重)。
0
当我开始训练模型时,以前没有保存任何模型。我可以安全地使用
model.compile()
。我现在将模型保存在h5
文件中,以便使用checkpoint
进行进一步的训练。说,我想进一步训练模型。我现在很困惑:我可以在这里使用
model.compile()
吗?并将其放置在model = load_model()
语句之前还是之后?如果model.compile()
重新初始化所有权重和偏差,则应将其放在model = load_model()
语句之前。在发现一些讨论之后,在我看来,仅当我之前没有保存任何模型时,才需要
model.compile()
。保存模型后,就无需使用model.compile()
。是真的还是假的?当我想使用经过训练的模型进行预测时,是否应该在进行预测之前使用model.compile()
?