Hydra-driven ML experiment launcher. Supports classification (ResNet/CIFAR-10) and detection (YOLOv8).
# Train (default: ResNet50 on CIFAR-10)
python src/train.py
# Override from CLI
python src/train.py model=yolo_v8 training.epochs=20 training.lr=0.0005
# Apply experiment preset
python src/train.py +experiment=long_run
# Evaluate checkpoint
python src/evaluate.py checkpoint=path/to/best_model.pt
# TensorBoard (view training progress)
tensorboard --logdir outputs/
# Lint
ruff check src/ tests/
# Test
pytest tests/ -v- Single entry point:
src/train.py(Hydra) - Config composition:
configs/config.yaml→ model + dataset + experiment overrides - Model registry:
src/models.py—build_model(cfg)dispatches oncfg.name - Dataset registry:
src/data.py—build_dataset(cfg)dispatches oncfg.name - YOLO uses ultralytics' built-in
.train(), not the standard training loop
- Add config:
configs/model/<name>.yamlwithname:field - Add builder:
_build_<name>(cfg)insrc/models.py - Register in
build_model()dispatch
- Add config:
configs/dataset/<name>.yamlwithname:field - Add builder:
_build_<name>(cfg)returning(train_ds, val_ds)insrc/data.py - Register in
build_dataset()dispatch
- All hyperparameters live in YAML configs, never hardcoded
- Functions follow
build_*()/_build_*()naming - Hydra manages output directories (
outputs/<date>/<time>/) - Seeds set via
src/utils.py:set_seed()— covers python, numpy, torch