TypeError:添加的图层必须是Layer类的实例。实测:

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

我试图将vgg16图层添加到Sequential模型,但得到问题标题中提到的错误

from keras.applications.vgg16 import VGG16

from tensorflow.contrib.keras.api.keras.models import Sequential
vgg_model = VGG16()
model = Sequential()
#print(model.summary())
for layer in vgg_model.layers:
        model.add(layer)

print(model.summary())

我正在使用keras 2.2.4

TypeError: The added layer must be an instance of class Layer. Found: <keras.engine.input_layer.InputLayer object at 0x7fc6f1b92240>
python keras conv-neural-network keras-layer
1个回答
0
投票

假设您要删除最后一层,并添加自己的最后一个完整连接层和10个节点。为了实现这一点,可以使用功能API。

from tensorflow.contrib.keras.api.keras.models import Sequential
import keras
from keras_applications.vgg16 import VGG16
vgg_model = VGG16()

# replace the last layer with new layer with 10 nodes.
last_layer = vgg_model.layers[-2].output ## 
output = keras.layers.Dense(10, activation="softmax")(last_layer) 

model = keras.models.Model(inputs=vgg_model.inputs, outputs=output)
model.summary()


print(model.summary())

或者使用include_top = False

vgg_model = VGG16(include_top=False)
vgg_output = vgg_model.outputs[0]
output = keras.layers.Dense(10, activation="softmax")(vgg_output)

model = keras.models.Model(inputs=vgg_model.inputs, outputs=output)

您可能想要使用预训练的重量。您可以使用权重参数来实现此目的

vgg_model = VGG16(weights='imagenet',include_top=False)

您可能想要冻结某些图层。

number_of_layers_to_freeze = 10
vgg_model = VGG16(include_top=False)
for i in range(number_of_layers_to_freeze):
    vgg_model.layers[i].trainable = False
vgg_output = vgg_model.outputs[0]
output = keras.layers.Dense(10, activation="softmax")(vgg_output)

model = keras.models.Model(inputs=vgg_model.inputs, outputs=output)
© www.soinside.com 2019 - 2024. All rights reserved.