Spaces:
Running
Running
| """ | |
| Entry point untuk evaluasi model pada test set. | |
| Usage: | |
| python scripts/evaluate.py --config configs/default.yaml | |
| # or override checkpoint paths: | |
| python scripts/evaluate.py --config configs/default.yaml \ | |
| --student_checkpoint outputs/checkpoints/student_tower_best.keras \ | |
| --scholarship_checkpoint outputs/checkpoints/scholarship_tower_best.keras | |
| """ | |
| import argparse | |
| import yaml | |
| import tensorflow as tf | |
| from src.models.student_tower import L2Normalize | |
| from src.evaluators import Evaluator | |
| from src.utils.data_loader import load_data, load_precomputed_features | |
| def parse_args(): | |
| parser = argparse.ArgumentParser() | |
| parser.add_argument("--config", type=str, default="configs/default.yaml") | |
| parser.add_argument("--student_checkpoint", type=str, default=None) | |
| parser.add_argument("--scholarship_checkpoint", type=str, default=None) | |
| return parser.parse_args() | |
| def main(): | |
| args = parse_args() | |
| with open(args.config) as f: | |
| cfg = yaml.safe_load(f) | |
| # Resolve checkpoint paths from CLI or config defaults | |
| student_checkpoint = args.student_checkpoint if args.student_checkpoint else cfg["models"]["student_tower"] | |
| scholarship_checkpoint = args.scholarship_checkpoint if args.scholarship_checkpoint else cfg["models"]["scholarship_tower"] | |
| # ββ Load features βββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| _, _, test_df = load_data(cfg) | |
| (stu_struct, sch_struct, stu_text_emb, sch_text_emb, | |
| stu_id_to_idx, sch_id_to_idx) = load_precomputed_features(cfg) | |
| sch_ids = list(sch_id_to_idx.keys()) | |
| # ββ Load model dari format .keras βββββββββββββββββββββββββββββββββββββββββ | |
| custom_objects = {"L2Normalize": L2Normalize} | |
| student_tower = tf.keras.models.load_model( | |
| student_checkpoint, custom_objects=custom_objects) | |
| scholarship_tower = tf.keras.models.load_model( | |
| scholarship_checkpoint, custom_objects=custom_objects) | |
| # ββ Evaluate ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| evaluator = Evaluator(k=cfg["evaluation"]["k_values"][0]) | |
| metrics = evaluator.compute_metrics( | |
| df=test_df, | |
| student_tower=student_tower, | |
| scholarship_tower=scholarship_tower, | |
| stu_struct=stu_struct, | |
| sch_struct=sch_struct, | |
| stu_text_emb=stu_text_emb, | |
| sch_text_emb=sch_text_emb, | |
| stu_id_to_idx=stu_id_to_idx, | |
| sch_ids=sch_ids, | |
| ) | |
| print("\nββ Test Set Evaluation βββββββββββββββββββββββββββββ") | |
| for key, val in metrics.items(): | |
| print(f" {key:<12}: {val:.4f}") | |
| if __name__ == "__main__": | |
| main() | |