假设我有以下预训练模型:
from keras.models import Sequential
from keras.layers import Dense
model = Sequential()
model.add(Dense(3, activation='relu', input_dim=5))
model.add(Dense(1))
model.compile(loss='mse', optimizer='adam')
当我通过以下数据(X)运行它时,我得到了预期的形状:
import numpy as np
X = np.random.rand(20, 5)
model.predict(X).shape
形状(20,1)
但是,出于转移学习的目的,我希望弹出顶层并通过相同的数据运行它。
model.layers.pop()
model.summary()
>>>
Layer (type) Output Shape Param #
=================================================================
dense_3 (Dense) (None, 3) 18
=================================================================
Total params: 18
Trainable params: 18
Non-trainable params: 0
在model.summary()
之后看着model.layers.pop()
似乎从顶层突然出现。然而,运行model.predict(X).shape
仍然导致(20,1)
形状,而不是预期的(20,3)
。
问题:我怎么能在最后几层正确地进行pop
。这是一个人为的例子。在我的情况下,我需要删除最后3层。
在这里找到答案:https://github.com/keras-team/keras/issues/8909
以下是需要的答案。不幸的是,必须创建第二个模型,由于某种原因,@ Eric的答案似乎不再像其他github问题中所建议的那样有效。
model.layers.pop()
model2 = Model(model.input, model.layers[-1].output)
model2.predict(X).shape