我将转移学习与 effectivenet_B0 结合使用,我想做的是在网络学习时逐渐解冻层。首先,我在整个网络之上训练 1 个密集层,而其他所有层都被冻结。我使用此代码来冻结图层:
for layer in model_base.layers[:-2]:
layer.trainable = False
Run Code Online (Sandbox Code Playgroud)
然后我使用以下代码解冻整个模型并冻结我需要的确切层:
model.trainable = True
for layer in model_base.layers[:-13]:
layer.trainable = False
Run Code Online (Sandbox Code Playgroud)
一切正常。我再进行一次 model.compile,它就开始从原来的地方开始训练,太棒了。但是,当我再次解冻所有层时
model.trainable = True
Run Code Online (Sandbox Code Playgroud)
并尝试进行微调,我的模型从头开始学习。
我尝试了不同的方法和方法来解决这个问题,但似乎没有任何效果。我也尝试对模型中的所有batch_normalization层使用layer.training = False和,但它也没有帮助。layer.trainable = False