Keras 图层解冻导致训练过程从头开始

Keras layers unfreezing causes training process to start from scratch

我训练了一个比 model.layers 集合

中的每一层都多的模型
layer.trainable = False

我给这个模型加了几层,叫做

model.compile(...)

并在部分层冻结的情况下对这个新模型进行了几个时期的训练。

后来我决定解冻图层 运行

for layer in model.layers:
   layer.trainable = True
model.compile(...)

当我开始学习具有未冻结层的模型时,我得到的损失函数值非常高,即使我只是想继续使用之前学习的权重进行训练。我还检查了 model.compile(...) 模型仍然可以很好地预测(没有重置以前学习的权重)但是一旦学习过程开始,一切都会变得 'erased' 我从头开始。

有人可以澄清一下,这种行为是否可以?如何重新编译模型而不是从头开始?

P.S。我还要求使用 layer.get_weights()layer.set_weights()

手动保存权重并将它们分配回新编译的模型

我使用了相同的编译参数(类似optimizer和类似loss

您可能需要在开始微调训练层时降低学习率。例如,0.01 的学习率可能适用于新的密集层(顶部),而所有其他层都设置为不可训练。但是当所有层都设置为可训练时,你可能需要将学习率降低到 0.001 不需要手动复制或设置权重。