如何从加载的检查点重置优化器状态



我使用save_weights_only选项使用ModelCheckpoint回调保存了一个模型

checkpoint_callback = tf.keras.callbacks.ModelCheckpoint(
'path.ckpt, save_weights_only=True)

然后,当我想对一个较小的数据集进行微调时,我将其重新加载:

ckpt = tf.train.Checkpoint(model)
ckpt.restore(checkpoint_path).expect_partial()

我用一个新的优化器重新编译了模型:

class CFG:
_scheduler = tf.keras.optimizers.schedules.ExponentialDecay(
initial_learning_rate=lr, decay_rate=decay_rate)
scheduler = WarmUp(
initial_learning_rate=lr, decay_schedule_fn=_scheduler,
warmup_steps=warmup_steps)
optimizer = tfa.optimizers.AdamW(
weight_decay=1e-4, learning_rate=scheduler, epsilon=1e-8)
model.compile(
optimizer=CFG.optimizer,
)

但不知何故,优化器仍然停留在以前衰减的lr上,而不是设置在我现在想要的更高的lr,而且我不确定其他优化器参数。

问题可能是因为您使用的是类属性而不是实例属性。

修复:

class CFG:
def __init__(self,lr,decay_rate,warmup_steps):
_scheduler = tf.keras.optimizers.schedules.ExponentialDecay(
initial_learning_rate=lr, decay_rate=decay_rate)
scheduler = WarmUp(
initial_learning_rate=lr, decay_schedule_fn=_scheduler,
warmup_steps=warmup_steps)
self.optimizer = tfa.optimizers.AdamW(
weight_decay=1e-4, learning_rate=scheduler, epsilon=1e-8)
new_CFG=CFG(lr,decay_rate,warmup_steps)
model.compile(
optimizer=new_CFG.optimizer,
)

最新更新