-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathutils.py
More file actions
72 lines (57 loc) · 2.35 KB
/
utils.py
File metadata and controls
72 lines (57 loc) · 2.35 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
import os
import pickle
import numpy as np
import time
from extract_features import extract_features
# Chemins pour la sauvegarde des features
FEATURES_PATH = "features/"
FEATURES_FILE = os.path.join(FEATURES_PATH, "precomputed_features.pkl")
def load_or_compute_features(data, labels, force_recompute=False):
"""
Charge les features depuis un fichier s'il existe, sinon les calcule et les sauvegarde.
Args:
data: Données d'entrée (images)
labels: Étiquettes correspondantes
force_recompute: Force le recalcul même si un fichier existe
Returns:
Tuple (features, labels)
"""
if not force_recompute and os.path.exists(FEATURES_FILE):
print(f"Chargement des features depuis {FEATURES_FILE}...")
with open(FEATURES_FILE, 'rb') as f:
saved_data = pickle.load(f)
return saved_data['features'], saved_data['labels']
print("Calcul des features...")
start_time = time.time()
features = extract_features(data)
elapsed_time = time.time() - start_time
print(f"Temps de calcul des features: {elapsed_time:.2f} secondes")
# S'assurer que le répertoire existe
os.makedirs(FEATURES_PATH, exist_ok=True)
# Sauvegarder les features et labels
with open(FEATURES_FILE, 'wb') as f:
pickle.dump({'features': features, 'labels': labels}, f)
print(f"Features sauvegardées dans {FEATURES_FILE}")
return features, labels
def custom_split(features, labels, test_size=0.2, seed=42):
"""
Effectue un split personnalisé sur les features.
Args:
features: Features calculées
labels: Étiquettes correspondantes
test_size: Taille de l'ensemble de test (proportion)
seed: Graine pour la reproductibilité
Returns:
Tuple ((train_features, train_labels), (test_features, test_labels))
"""
np.random.seed(seed)
indices = np.arange(len(features))
np.random.shuffle(indices)
split_idx = int((1 - test_size) * len(features))
train_indices = indices[:split_idx]
test_indices = indices[split_idx:]
train_features = features[train_indices]
train_labels = labels[train_indices]
test_features = features[test_indices]
test_labels = labels[test_indices]
return (train_features, train_labels), (test_features, test_labels)