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