Kris
Kris

Reputation: 327

Cannot convert VGG16 layers to sequential

I am trying to do image classification using VGG16 pre-trained model. For the same, I did the following:

vgg16_model = keras.applications.vgg16.VGG16()

The type of the model is as follows:

type(vgg16_model)

And the result is:

tensorflow.python.keras.engine.training.Model

Then, I defined a Sequential model as:

model = Sequential()

Then, I tried to convert the vgg16_model into sequential by:

for layer in vgg16_model.layers:
    model.add(layer)

It shows me an error as follows:

TypeError: The added layer must be an instance of class Layer. Found: < tensorflow.python.keras.engine.input_layer.InputLayer object at 0x1ddbce5e80>**

It would be great if anyone could help me on this one.

Upvotes: 0

Views: 636

Answers (2)

today
today

Reputation: 33410

One simpler way to do this is to pass the layers directly to the Sequential model instance, instead of using a for loop:

from keras.applications.vgg16 import VGG16

vgg = VGG16(weights='imagenet', ...)
model = Sequential(vgg.layers)

Upvotes: 0

Kris
Kris

Reputation: 327

Solution:

My mistake was that my import statement was:

from keras.applications.vgg16 import VGG16

Then, again, when I initialised the model, I called it again as:

vgg16_model = keras.applications.vgg16.VGG16()

So, a stupid mistake on my part. The fix is as follows:

vgg16_model = VGG16()

I realise that the problem is very specific and might not be so much useful to the community. Still, I am posting the solution just in case someone else faces it again.

Upvotes: 1

Related Questions