在keras中弹出上层

问题描述 投票:2回答:1

假设我有以下预训练模型:

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层。

python keras keras-layer
1个回答
1
投票

在这里找到答案: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
© www.soinside.com 2019 - 2024. All rights reserved.