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:
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.
3 Réponses :
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])
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 ...)
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
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)) ....
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