21
votes

Le calque ajouté 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 ce tutoriel sur la mise au point des modèles VGG16.

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

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

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:

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

Dépendances:

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

Je suis ce blog mais à la place, je souhaite utiliser VGG16.

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


1 commentaires

Version Keras 2.2.4 tf. modification de l'importation depuis l'importation depuis l'importation keras.layers en tant que couches vers tensorflow.keras.layers en tant que couches


3 Réponses :


29
votes

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

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

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

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


1 commentaires

Oui, c'est un scénario: mélanger keras.Sequential() avec tf.keras.Sequential() . L'autre problème est avec Input (qui est un tenseur) vs InputLayer qui est une couche, et peut être ajouté à un modèle Sequential . Cependant, j'ai eu du code qui a ajouté Input à un modèle Sequential , et cela a fonctionné pour quelqu'un d'autre (qui avait une configuration / version différente, etc.). (J'avais besoin de patcher ce code ...)



3
votes

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

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

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

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


0 commentaires

6
votes

En ajoutant à la réponse de @Manoj Mohan, vous pouvez ajouter un input_layer à votre model utilisant input_layer des layers Keras comme ci-dessous:

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)

si vous utilisez le Keras intégré TensorFlow 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
from keras.layers import InputLayer

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


0 commentaires