我想弹出模型的最后一层。因此我使用了tf.keras.layers.pop()
,但是它不起作用。
base_model.summary()
base_model.layers.pop()
base_model.summary()
当我使用tf.keras._layers.pop()
时,它可以工作。
base_model.summary()
base_model._layers.pop()
base_model.summary()
我找不到有关此用法的文档。有人可以帮忙解释一下吗?
答案 0 :(得分:0)
我同意这令人困惑。原因是model.layers
返回了层列表的浅表副本,因此:
tldr不要使用model.layers.pop()
删除最后一层。相反,我们应该使用除最后一层之外的所有层创建一个新模型。也许是这样的:
new_model = tf.keras.models.Sequential(base_model.layers[:-1])
查看此github issue以获得更多详细信息
答案 1 :(得分:0)
@Stewart_R清楚地显示了解决问题的方法:)
让我在解决方案中放一个简单的代码。
loaded_model = keras.models.load_model(fname) # remove the last 2 layers sliced_loaded_model = Sequential(loaded_model.layers[:-2]) # set trainable=Fasle for the layers from loaded_model for layer in sliced_loaded_model.layers: layer.trainable = False # add new layers sliced_loaded_model.add(Dense(32, activation='relu')) # trainable=True is default sliced_loaded_model.add(Dense(1)) # compile sliced_loaded_model.compile(loss='mse', optimizer='adam', metrics=[]) # fit ...