web-dev-qa-db-fra.com

AttributeError: l'objet 'Node' n'a pas d'attribut 'output_masks'

J'utilise le modèle Keras pré-entrainé VGG16. Le problème est qu’après avoir configuré tensorflow pour utiliser le GPU, j’obtiens une erreur que je n’avais pas auparavant lors de l’utilisation du processeur.

L'erreur est la suivante:

    Traceback (most recent call last):
  File "/home/guillaume/Documents/Allianz/ConstatOrNotConstatv3/train_network.py",      line 109, in <module>
    model = LeNet.build(width=100, height=100, depth=3, classes=5)
  File "/home/guillaume/Documents/Allianz/ConstatOrNotConstatv3/lenet.py", line 39,    in build
    output = model(pretrainedOutput)
  File "/usr/local/lib/python3.6/dist-packages/keras/engine/base_layer.py", line 443, in __call__
    previous_mask = _collect_previous_mask(inputs)
  File "/usr/local/lib/python3.6/dist-packages/keras/engine/base_layer.py", line 1311, in _collect_previous_mask
mask = node.output_masks[tensor_index]
  AttributeError: 'Node' object has no attribute 'output_masks'

Je l'obtiens après avoir exécuté ce code: 

    pretrained_model = VGG16(
        include_top=False,
        input_shape=(height, width, depth),
        weights='imagenet'
    )
    for layer in pretrained_model.layers:
        layer.trainable = False

    model = Sequential()
    # first (and only) set of FC => RELU layers
    model.add(Flatten())
    model.add(Dense(200, activation='relu'))
    model.add(Dropout(0.5))
    model.add(BatchNormalization())
    model.add(Dense(400, activation='relu'))
    model.add(Dropout(0.5))
    model.add(BatchNormalization())

    # softmax classifier
    model.add(Dense(classes,activation='softmax'))

    pretrainedInput = pretrained_model.input
    pretrainedOutput = pretrained_model.output
    output = model(pretrainedOutput)
    model = Model(pretrainedInput, output)

EDIT1: J'ai keras (2.2.2) et tensorflow (1.10.0rc1). J'ai aussi essayé sur keras 2.2.0 et la même erreur. Le problème, c’est que l’environnement python que j’utilise fonctionne sur d’autres réseaux NN non prétrainés.

EDIT2: Je suis capable de connecter deux modèles faits maison. C'est seulement avec les pré-entraînés qu'il y a un problème et pas seulement avec VGG16.

4
Saroten

Vous êtes probablement en train d'importer tf.keras.layers ou tf.keras.applications ou d'autres modules keras de tensorflow.keras, et de mélanger ces objets avec des objets du package keras "pur", qui n'est pas compatible, basé sur la version, etc. Je recommande de voir si vous pouvez tout importer et tout exécuter à partir des modules "purs" de keras; n'utilisez pas tf.keras lors du débogage, car ils ne sont pas nécessairement compatibles. J'ai eu le même problème, et cette solution fonctionne pour moi.

9
NeurallyInspired

J'ai eu la même erreur lorsque j'ai importé simultanément keras et tenerflow.keras: from tensorflow.keras.optimizers import Adam from keras.utils import multi_gpu_model

J'ai résolu ce problème après avoir changé le code en: from tensorflow.keras.optimizers import Adam from tensorflow.keras.utils import multi_gpu_model

0
ShusenTang