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 不需要手动复制或设置权重。
我训练了一个比 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 不需要手动复制或设置权重。