当我开始训练模型时,之前没有保存任何模型。我可以用model.compile()
安全。我现在已将模型保存在h5
文件以供进一步培训使用checkpoint
.
比如说,我想进一步训练模型。我现在很困惑:我可以使用model.compile()
这里?应该放在之前还是之后model = load_model()
陈述?如果model.compile()
重新初始化所有权重和偏差,我应该将其放在之前model = load_model()
陈述。
在发现一些讨论后,在我看来model.compile()
仅当我之前没有保存模型时才需要。一旦我保存了模型,就不需要使用model.compile()
。这是真的还是假的?当我想使用经过训练的模型进行预测时,我应该使用model.compile()
在预测之前?
什么时候使用?
If你正在使用compile
,肯定是在之后load_model()
。毕竟,您需要一个模型来编译。 (附:load_model
使用与模型一起保存的优化器自动编译模型)
什么是compile
do?
编译定义了损失函数, the 优化器和metrics。就这样。
它与权重无关,您可以根据需要多次编译模型,而不会导致预训练权重出现任何问题。
您需要一个已编译的模型train(因为训练使用损失函数和优化器)。但没有必要编译模型来进行预测。
您需要多次使用编译吗?
Only if:
- You want to change one of these:
- 损失函数
- 优化器/学习率
- 指标
- The
trainable
某层的属性
- 您加载(或创建)了尚未编译的模型。或者您的加载/保存方法没有考虑之前的编译。
再次编译的后果:
如果您再次编译模型,您将丢失优化器状态.
这意味着你的训练一开始会受到一点影响,直到它调整学习率、动量等。但是绝对不会对权重造成损害(当然,除非你的初始学习率太大以至于第一次训练步骤极大地改变了微调的权重)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)