Demonstration and evaluation of Score-Based Data Assimilation (SDA) vs classical 4D-Var on the Lorenz system.
SDA approach: Uses diffusion models to learn score functions over trajectory segments. At inference time, we generate trajectories conditioned on sparse noisy observations. The neat thing is the observation model is decoupled from training, so you can do zero-shot inference on different observation scenarios.
4D-Var baseline: Standard variational approach—minimize a cost function balancing model constraints and observation fit.
Both are evaluated on the Lorenz system with two scenarios:
lo: sparse observations (every 8 steps, low noise σ=0.05)hi: dense observations (every step, higher noise σ=0.25)
cd sda
conda env create -f environment.yml
conda activate sda
pip install -e .
pip install git+https://github.com/google/jax-cfd
wandb loginGenerate data (Lorenz trajectories):
cd sda/lorenz
python generate.py --output ./Creates data/{train,valid,test}.h5 (80/10/10 split).
Train SDA (score networks):
python train.pySaves checkpoints to runs/.
Evaluate SDA:
python eval.pyRuns inference on test set with observations, outputs results_eval/stats_*.csv.
4D-Var baseline:
cd ../../4D-var/lorenz
python eval.pyOn a cluster:
sbatch run_eval_slurm.sh
sbatch ../../../4D-var/lorenz/submit_eval_slurm.shsda/– main package with score networks, Markov chains, utilitiessda/lorenz/– experiments on Lorenz: training and evaluation code4D-var/lorenz/– 4D-Var solverdata/– training/test trajectories (HDF5)outputs/– results and trained model checkpointstrajectories/– analysis scripts
Score networks:
ScoreNet: time-conditioned MLP with Fourier embeddingsScoreUNet: U-Net variant for spatial dataTimeEmbedding: Fourier features for continuous time
Training: Denoising score matching on trajectory windows (default 5 steps).
Inference: Reverse SDE sampling, conditioned on observations via Langevin dynamics.
SDA_RUNS_PATH: where trained models go (default:./runs/)SDA_DATA_PATH: where data lives (default:./data/)SDA_RESULTS_PATH: output results dir (default:./results_eval/)SDA_OBS_PATH: observation data (default:./obs/)
- Rozet & Louppe (2023): Score-based Data Assimilation