ericjedha commited on
Commit
4e23572
·
verified ·
1 Parent(s): 4ccca0d

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +9 -3
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
- return model.input_names[0]
 
 
 
 
 
 
 
 
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