【问题标题】:Keras layers unfreezing causes training process to start from scratchKeras 层解冻导致训练过程从头开始
【发布时间】:2018-04-26 07:10:36
【问题描述】:

我训练了一个具有多个层的模型,而不是 model.layers 集中的每一层

layer.trainable = False

我在这个模型中添加了几个层,称为

model.compile(...)

并在部分层冻结的情况下将这个新模型训练了几个 epoch。

后来我决定解冻图层并运行

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

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

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

附:我还要求手动保存权重并使用layer.get_weights()layer.set_weights() 将它们分配回新编译的模型

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

【问题讨论】:

    标签: python deep-learning keras keras-layer


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-07-13
      • 1970-01-01
      • 1970-01-01
      • 2020-08-25
      • 1970-01-01
      • 2020-04-07
      • 2020-06-25
      相关资源
      最近更新 更多