refactor: reorganize project structure by moving core modules and update import paths in API server
This commit is contained in:
@@ -0,0 +1,89 @@
|
||||
import os
|
||||
from train_module import train_model
|
||||
from pathlib import Path
|
||||
|
||||
def train_all_models():
|
||||
# Ensure output directory exists
|
||||
output_dir = Path("land_classification_model")
|
||||
output_dir.mkdir(exist_ok=True)
|
||||
|
||||
# Define models and their optimized hyperparameters
|
||||
models_config = [
|
||||
{'type': 'xgboost', 'n_estimators': 200, 'max_depth': 6, 'learning_rate': 0.05, 'use_gpu': True},
|
||||
{'type': 'lightgbm', 'n_estimators': 300, 'max_depth': -1, 'learning_rate': 0.05, 'use_gpu': True},
|
||||
{'type': 'random_forest', 'n_estimators': 100, 'max_depth': 15, 'use_gpu': False},
|
||||
{'type': 'decision_tree', 'max_depth': 12, 'use_gpu': False},
|
||||
{'type': 'svm', 'use_gpu': False},
|
||||
{'type': 'cnn', 'n_estimators': 30, 'use_gpu': True}, # n_estimators acts as epochs
|
||||
{'type': 'swin-unet', 'n_estimators': 80, 'learning_rate': 0.0003, 'use_gpu': True},
|
||||
{'type': 'mobilenet-lraspp', 'n_estimators': 50, 'learning_rate': 0.0008, 'use_gpu': True}
|
||||
]
|
||||
|
||||
results = []
|
||||
|
||||
print("=" * 70)
|
||||
print("🚀 BẮT ĐẦU HUẤN LUYỆN TẤT CẢ MÔ HÌNH PHÂN LOẠI LỚP PHỦ")
|
||||
print("=" * 70)
|
||||
|
||||
for cfg in models_config:
|
||||
model_type = cfg['type']
|
||||
print(f"\n[{model_type.upper()}] Đang tiến hành huấn luyện...")
|
||||
|
||||
# Prepare parameters for train_model
|
||||
params = {
|
||||
'bbox': [105.5, 9.2, 106.3, 10.0], # Matching the working coordinates
|
||||
'time_range': '2023-01-01/2023-04-30',
|
||||
'model_type': model_type,
|
||||
'feature_mode': 'extended',
|
||||
'use_cache': True,
|
||||
'output_model_path': f"land_classification_model/model_{model_type}_auto.joblib"
|
||||
}
|
||||
|
||||
# Merge specific hyperparameters
|
||||
for key in ['n_estimators', 'max_depth', 'learning_rate', 'use_gpu']:
|
||||
if key in cfg:
|
||||
params[key] = cfg[key]
|
||||
|
||||
try:
|
||||
res = train_model(**params)
|
||||
|
||||
# Extract metrics
|
||||
if res.get('success'):
|
||||
metrics = {
|
||||
'model': model_type.upper(),
|
||||
'accuracy': res.get('test_accuracy', 0.0),
|
||||
'params': f"Estimators:{cfg.get('n_estimators','-')}, Depth:{cfg.get('max_depth','-')}",
|
||||
'status': '✅ Success'
|
||||
}
|
||||
else:
|
||||
metrics = {
|
||||
'model': model_type.upper(),
|
||||
'accuracy': 0.0,
|
||||
'params': '-',
|
||||
'status': f"❌ Failed: {res.get('error', 'Unknown')}"
|
||||
}
|
||||
results.append(metrics)
|
||||
print(f"[{model_type.upper()}] ✅ Xong! Accuracy: {metrics['accuracy']:.4f}")
|
||||
|
||||
except Exception as e:
|
||||
print(f"[{model_type.upper()}] ❌ LỖI: {e}")
|
||||
results.append({
|
||||
'model': model_type.upper(),
|
||||
'accuracy': 0.0,
|
||||
'params': '-',
|
||||
'status': f"❌ Error: {str(e)}"
|
||||
})
|
||||
|
||||
# Print summary table
|
||||
print("\n\n" + "=" * 70)
|
||||
print("📊 TỔNG HỢP KẾT QUẢ HUẤN LUYỆN")
|
||||
print("=" * 70)
|
||||
print(f"{'Mô hình':<20} | {'Độ chính xác (Acc)':<20} | {'Tham số':<25} | {'Trạng thái'}")
|
||||
print("-" * 70)
|
||||
for r in results:
|
||||
acc_str = f"{r['accuracy']:.4f}" if isinstance(r['accuracy'], float) else str(r['accuracy'])
|
||||
print(f"{r['model']:<20} | {acc_str:<20} | {r['params']:<25} | {r['status']}")
|
||||
print("=" * 70)
|
||||
|
||||
if __name__ == "__main__":
|
||||
train_all_models()
|
||||
Reference in New Issue
Block a user