Update app.py
Browse files
app.py
CHANGED
|
@@ -33,7 +33,15 @@ from tensorflow.keras.applications.densenet import preprocess_input as preproces
|
|
| 33 |
# ---- Fonctions utilitaires robustes pour les modèles Keras ----
|
| 34 |
def get_primary_input_name(model):
|
| 35 |
"""Retourne le nom de la couche d'input principale du modèle."""
|
| 36 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 37 |
|
| 38 |
def safe_forward(model, x):
|
| 39 |
"""Appelle un modèle en utilisant le nom d'input correct pour éviter les UserWarnings."""
|
|
@@ -68,14 +76,12 @@ def make_gradcam(image_pil, model, last_conv_layer_name="conv5_block32_concat",
|
|
| 68 |
|
| 69 |
grad_model = Model(model.inputs, [model.get_layer(last_conv_layer_name).output, model.output])
|
| 70 |
|
| 71 |
-
# Correction 1: Utiliser le nom d'input correct, même pour le grad_model
|
| 72 |
input_name = get_primary_input_name(model)
|
| 73 |
input_for_model = {input_name: img_array_preprocessed}
|
| 74 |
|
| 75 |
with tf.GradientTape() as tape:
|
| 76 |
last_conv_layer_output, preds = grad_model(input_for_model, training=False)
|
| 77 |
|
| 78 |
-
# Correction 2: Gérer le cas où la sortie 'preds' est une liste
|
| 79 |
if isinstance(preds, list):
|
| 80 |
preds = preds[0]
|
| 81 |
|
|
|
|
| 33 |
# ---- Fonctions utilitaires robustes pour les modèles Keras ----
|
| 34 |
def get_primary_input_name(model):
|
| 35 |
"""Retourne le nom de la couche d'input principale du modèle."""
|
| 36 |
+
# ===== CORRECTION FINALE ICI =====
|
| 37 |
+
# L'attribut correct est `model.inputs`, qui est une liste de tenseurs.
|
| 38 |
+
# On prend le premier tenseur de la liste et on récupère son nom.
|
| 39 |
+
if isinstance(model.inputs, list) and len(model.inputs) > 0:
|
| 40 |
+
# Le nom est souvent de la forme "input_layer:0", on ne garde que "input_layer"
|
| 41 |
+
return model.inputs[0].name.split(':')[0]
|
| 42 |
+
# Fallback au cas où, mais ne devrait pas être nécessaire
|
| 43 |
+
return "input_1"
|
| 44 |
+
# ===== FIN DE LA CORRECTION =====
|
| 45 |
|
| 46 |
def safe_forward(model, x):
|
| 47 |
"""Appelle un modèle en utilisant le nom d'input correct pour éviter les UserWarnings."""
|
|
|
|
| 76 |
|
| 77 |
grad_model = Model(model.inputs, [model.get_layer(last_conv_layer_name).output, model.output])
|
| 78 |
|
|
|
|
| 79 |
input_name = get_primary_input_name(model)
|
| 80 |
input_for_model = {input_name: img_array_preprocessed}
|
| 81 |
|
| 82 |
with tf.GradientTape() as tape:
|
| 83 |
last_conv_layer_output, preds = grad_model(input_for_model, training=False)
|
| 84 |
|
|
|
|
| 85 |
if isinstance(preds, list):
|
| 86 |
preds = preds[0]
|
| 87 |
|