我试图将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>
假设您要删除最后一层,并添加自己的最后一个完整连接层和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)