TypeError: добавленный слой должен быть экземпляром класса Layer.Найденный: - PullRequest
0 голосов
/ 18 февраля 2019

Я пытаюсь добавить слои vgg16 в последовательную модель, но получаю ошибку, указанную в заголовке вопроса

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>

1 Ответ

0 голосов
/ 18 февраля 2019

Допустим, вы хотите удалить последний слой и добавить свой последний полностью связанный слой с 10 узлами.Для этого можно использовать функциональный API-интерфейс keras.

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)
...