我正在使用带有ImageNet权重的EfficientNet模型(https://keras.io/api/applications/efficientnet/#efficientnetb0-function),我想使用自定义的顶层,所以我设置了top = False
。现在我想知道当我使用以下代码时,EfficientNet的权重是否被冻结并且不会被重新训练(这是我想要的效果):
efnB0_model = efn.EfficientNetB0(include_top=False, weights="imagenet", input_shape=(224, 224, 3))efnB0_model.trainable = False
或者我需要使用其他代码?
非常感谢!
回答:
你的方法是有效的,但通常人们会逐层操作,因为你可能会决定解冻某些层:
for layer in model.layers: layer.trainable = False
model.layers
返回一个列表,因此你也可以只解冻最后几层:
for layer in model.layers[-10:]: layer.trainable = False
你可以使用以下代码验证哪些可以被训练:
model.trainable_variables
[]
在这种情况下,没有任何可训练的部分。