web-dev-qa-db-fra.com

La couche ajoutée doit être une instance de la classe Layer. Trouvé: <tensorflow.python.keras.engine.input_layer.InputLayer>

Je suis nouveau dans l'apprentissage automatique. Je suivais cela tutoriel sur les modèles VGG16 à réglage fin.

Le modèle s'est bien chargé avec ce code:

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

mais obtient cette ERREUR:

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

Lors de l'exécution de ce code:

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

Dépendances:

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

Je suis ceci blog mais à la place je veux utiliser VGG16.

Toute aide pour résoudre ce problème serait appréciée. Merci beaucoup.

11
Rstynbl

Cela ne fonctionnera pas car une couche tensorflow.keras est ajoutée à un modèle de keras.

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

Instanciez tensorflow.keras.Sequential (). Cela fonctionnera.

model = tensorflow.keras.Sequential()
model.add(vgg_model.layers[0])
13
Manoj Mohan

Vous n'avez pas besoin de créer un InputLayer, vous devez simplement importer la couche BatchNormalization de la même manière que votre Conv2D/autres couches, par exemple:

from tensorflow.keras.layers import Conv2D, Flatten, MaxPooling2D, Dropout, BatchNormalization

à la place de l'importer en tant que couche Keras indépendante, c'est-à-dire:

from tensorflow.keras.layers import Conv2D, Flatten, MaxPooling2D, Dropout
from keras.layers import BatchNormalization
2

En ajoutant à la réponse de @Manoj Mohan, vous pouvez ajouter un input_layer à votre model à l'aide de input_layer de Keraslayers comme ci-dessous:

import keras
from keras.models import Sequential
from keras.layers import InputLayer

model = Sequential()
model.add(InputLayer(input_shape=shape, name=name))
....

si vous utilisez le TensorFlow builtin Keras alors l'importation est différente les autres choses sont toujours les mêmes

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

Pour en venir à la partie principale, si vous souhaitez importer des couches dans votre modèle séquentiel, vous pouvez utiliser la syntaxe suivante.

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)
1
kgangadhar