the flow for mnist works like:
* generate base dataset  `napkin_mnist/gen_base_data.py`
* train model got get P(X,Y |w1,w2) `napkin_mnist/train_synthetic_model.sh`
* generate synthetic data from previous step `napkin_mnist/gen_synthetic_data.py`
* train final diffusion model `napkin_mnist/train_final.sh`
* generate final data from causal interventions `napkin_mnist/gen_final_data.py`

all cfg files are basically clones of `og_train.py` with changes made for their specific application





``python3 gen_final_data.py --pkl_loc=base_data/napkin_mnist_train.pkl --diffuser_loc=synthetic_model/ckpt_950_checkpoint.pt --n_samples=60000 --device=1 --save_dir=synthetic_training_data/``

``python3 gen_synthetic_data.py --pkl_loc=base_data/napkin_mnist_train.pkl --diffuser_loc=synthetic_model/ckpt_950_checkpoint.pt --n_samples=60000 --device=1 --save_dir=synthetic_training_data/``

``python3 gen_final_data.py --pkl_loc=base_data/napkin_mnist_train.pkl --diffuser_loc=synthetic_model/ckpt_950_checkpoint.pt --n_samples=60000 --device=1 --save_dir=synthetic_training_data/``
