Files changed (1) hide show
  1. app.py +54 -37
app.py CHANGED
@@ -67,42 +67,59 @@ import streamlit as st
67
  from models.cnn import CNNModel
68
  from models.sca import CustomSCA
69
 
70
- # 1. Définir la fonction objectif
71
- def objective_function(solution):
72
- params = {
73
- 'filter1': int(solution[0]),
74
- 'filter2': int(solution[1]),
75
- 'filter3': int(solution[2]),
76
- 'learning_rate': solution[3],
77
- 'dropout': solution[4]
78
- }
79
- model = CNNModel(input_shape=(100, 1), num_classes=5) # Ajuster selon vos données
80
- _, val_acc = model.train(X_train, y_train, params, epochs=3)
81
- return 1 - val_acc # On minimise l'erreur
82
 
83
- # 2. Configurer SCA
84
- bounds = [
85
- (32, 256), # filter1
86
- (64, 512), # filter2
87
- (128, 1024), # filter3
88
- (0.0001, 0.01), # learning_rate
89
- (0.1, 0.7) # dropout
90
- ]
91
 
92
- if st.button("Optimiser le CNN avec SCA"):
93
- sca = CustomSCA(obj_func=objective_function, bounds=bounds)
94
- result = sca.optimize()
95
-
96
- st.write("Meilleurs hyperparamètres trouvés:")
97
- st.json({
98
- 'Filtres': [int(result['best_solution'][0]),
99
- int(result['best_solution'][1]),
100
- int(result['best_solution'][2])],
101
- 'Learning Rate': result['best_solution'][3],
102
- 'Dropout': result['best_solution'][4],
103
- 'Précision validation': f"{1 - result['best_fitness']:.2%}"
104
- })
105
-
106
- st.line_chart({
107
- 'Erreur': result['convergence_curve']
108
- })
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
67
  from models.cnn import CNNModel
68
  from models.sca import CustomSCA
69
 
70
+ st.markdown("---")
71
+ st.subheader("🔧 Optimisation du modèle CNN via SCA")
 
 
 
 
 
 
 
 
 
 
72
 
73
+ if st.button("Optimiser"):
74
+ # Vérification si X_train et y_train sont prêts
75
+ try:
76
+ # Prépare tes données ici si ce n'est pas déjà fait
77
+ X_train = np.array(st.session_state['processed_df'].iloc[:, :-1])
78
+ y_train = np.array(st.session_state['processed_df'].iloc[:, -1])
 
 
79
 
80
+ # Remodèle X pour CNN (batch, time, features)
81
+ X_train = X_train.reshape((X_train.shape[0], X_train.shape[1], 1))
82
+
83
+ # 1. Définir la fonction objectif (mise à jour ici avec accès aux données)
84
+ def objective_function(solution):
85
+ params = {
86
+ 'filter1': int(solution[0]),
87
+ 'filter2': int(solution[1]),
88
+ 'filter3': int(solution[2]),
89
+ 'learning_rate': solution[3],
90
+ 'dropout': solution[4]
91
+ }
92
+ model = CNNModel(input_shape=(X_train.shape[1], 1), num_classes=len(np.unique(y_train)))
93
+ _, val_acc = model.train(X_train, y_train, params, epochs=3)
94
+ return 1 - val_acc
95
+
96
+ # 2. Exécution de SCA
97
+ bounds = [
98
+ (32, 256), # filter1
99
+ (64, 512), # filter2
100
+ (128, 1024), # filter3
101
+ (0.0001, 0.01), # learning_rate
102
+ (0.1, 0.7) # dropout
103
+ ]
104
+
105
+ sca = CustomSCA(obj_func=objective_function, bounds=bounds)
106
+ result = sca.optimize()
107
+
108
+ st.success("Optimisation terminée ✅")
109
+
110
+ st.write("### Meilleurs hyperparamètres trouvés :")
111
+ st.json({
112
+ 'Filtres': [int(result['best_solution'][0]),
113
+ int(result['best_solution'][1]),
114
+ int(result['best_solution'][2])],
115
+ 'Learning Rate': result['best_solution'][3],
116
+ 'Dropout': result['best_solution'][4],
117
+ 'Précision validation': f"{1 - result['best_fitness']:.2%}"
118
+ })
119
+
120
+ st.line_chart({
121
+ 'Erreur': result['convergence_curve']
122
+ })
123
+
124
+ except Exception as e:
125
+ st.error(f"Erreur pendant l'optimisation : {e}")