qin*_*ong 7 python tensorflow tensorflow2.0
我想弹出模型的最后一层。所以我使用了tf.keras.layers.pop(),但它不起作用。
base_model.summary()
Run Code Online (Sandbox Code Playgroud)
base_model.layers.pop()
base_model.summary()
Run Code Online (Sandbox Code Playgroud)
当我使用时tf.keras._layers.pop(),它有效。
base_model.summary()
Run Code Online (Sandbox Code Playgroud)
base_model._layers.pop()
base_model.summary()
Run Code Online (Sandbox Code Playgroud)
我没有找到有关此用法的文档。有人可以帮忙解释一下吗?
Ste*_*t_R 10
我同意这很令人困惑。原因是model.layers返回图层列表的浅表副本,因此:
tldr 不用于model.layers.pop()删除最后一层。相反,我们应该创建一个新模型,其中包含除最后一层之外的所有层。也许是这样的:
new_model = tf.keras.models.Sequential(base_model.layers[:-1])
Run Code Online (Sandbox Code Playgroud)
查看此github 问题以获取更多详细信息
@Stewart_R 清楚地展示了问题的解决方案:)
让我用一个简单的代码来解决这个问题。
loaded_model = keras.models.load_model(fname)
# remove the last 2 layers
sliced_loaded_model = Sequential(loaded_model.layers[:-2])
# set trainable=False 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
...
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7749 次 |
| 最近记录: |