我训练了一个模型,其中有几层而不是模型中的每一层。
layer.trainable = False
我在这个模型中添加了几个图层,名为
model.compile(...)
并为几个时期训练了这个新模型,其中部分层被冻结。
后来我决定解冻图层并运行
for layer in model.layers:
layer.trainable = True
model.compile(...)
当我开始学习具有未冻结层的模型时,即使我只想继续从先前学过的权重进行训练,我也会获得非常高的损失函数值。我还检查了model.compile(...)
模型仍能很好地预测(不重置以前学过的权重),但是一旦学习过程开始,所有内容都会被删除'我从零开始。
有人可以澄清,这种行为是否正常?如何重新编译模型而不是从头开始?
P.S。我还要求使用layer.get_weights()
和layer.set_weights()
我使用了相同的编译参数(类似optimizer
和类似的loss
)
答案 0 :(得分:0)
在开始微调训练过的图层时,您可能需要降低学习率。例如,学习率0.01可能适用于新的密集图层(顶部),其他所有图层都设置为无法处理。但是,当将所有图层设置为可训练时,您可能需要将学习率降低到0.001,无需手动复制或设置权重。