Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

The added layer must be an instance of class Layer. Found: <tensorflow.python.keras.engine.input_layer.InputLayer>

Tags:

I am new to machine learning. I was following this tutorial on fine-tuning VGG16 models.

The model loaded fine with this code:

vgg_model = tensorflow.keras.applications.vgg16.VGG16() 

but gets this ERROR:

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

When running this code:

model = Sequential() for layer in vgg_model.layers[:-1]:     model.add(layer) 

Dependencies:

  • Keras 2.2.3
  • Tensorflow 1.12.0
  • tensorflow-gpu1.12.0
  • Python 3.6.0

I am following this blog but instead, I want to use VGG16.

Any help to fix this would be appreciated. Thank you so much.

like image 830
Rstynbl Avatar asked Mar 24 '19 14:03

Rstynbl


2 Answers

This won't work because a tensorflow.keras layer is getting added to a keras Model.

vgg_model = tensorflow.keras.applications.vgg16.VGG16() model = keras.Sequential() model.add(vgg_model.layers[0]) 

Instantiate tensorflow.keras.Sequential(). This will work.

model = tensorflow.keras.Sequential() model.add(vgg_model.layers[0]) 
like image 83
Manoj Mohan Avatar answered Oct 20 '22 19:10

Manoj Mohan


Adding to @Manoj Mohan's answer, you can add an input_layer to your model using input_layer from Keras layers as below:

import keras from keras.models import Sequential from keras.layers import InputLayer  model = Sequential() model.add(InputLayer(input_shape=shape, name=name)) .... 

if you are using the TensorFlow builtin Keras then import is different other things are still the same

import tensorflow as tf import tensorflow.keras as keras from tensorflow.keras.models import Sequential from tensorflow.keras.layers import InputLayer  model = Sequential() model.add(InputLayer(input_shape=shape, name=name)) .... 

Coming to the main part, if you want to import layers to your sequential model, you can use the following syntax.

import keras from keras.models import Sequential, load_model from keras import optimizers from keras.applications.vgg16 import VGG16 from keras.applications.vgg19 import VGG19  # For VGG16 loading to sequential model   model = Sequential(VGG16().layers) # For VGG19 loading to sequential model   model = Sequential(VGG19().layers) 
like image 38
kgangadhar Avatar answered Oct 20 '22 20:10

kgangadhar