Download scripts/inference.py from OneScience-Group/RONOM: direct link, hf CLI and curl.
- Browser
- Download file 2.86 kB
-
https://huggingface.co/OneScience-Group/RONOM/resolve/main/scripts/inference.py
- Command line
-
hf download hf://OneScience-Group/RONOM/scripts/inference.py
-
curl -L -o inference.py https://huggingface.co/OneScience-Group/RONOM/resolve/main/scripts/inference.py
2.86 kB
| """Load validation-selected weights and evaluate the last 200 independent cases.""" | |
| import csv | |
| import os | |
| import time | |
| import numpy as np | |
| from common import (parser, load_config, seed_everything, device_for, resolve, | |
| load_splits, load_best, evaluate, save_json, digest, update_run_manifest) | |
| def main(): | |
| args = parser(__doc__).parse_args() | |
| cfg = load_config(args.config) | |
| seed_everything(cfg['seed'], cfg['training']['num_threads']) | |
| device = device_for(cfg['inference']['device']) | |
| model, checkpoint, checkpoint_path = load_best(cfg, device) | |
| splits, times, data_path = load_splits(cfg, ['test']) | |
| if checkpoint['data_sha256'] != digest(data_path): | |
| raise ValueError('Raw test data checksum differs from the training source') | |
| u, y, ids = splits['test'] | |
| start = time.monotonic() | |
| summary, pred, rmse_i, relative_i, latent = evaluate( | |
| model, u.to(device), y.to(device), times, cfg['inference']['batch_size'], True) | |
| summary.update(split='independent_test', indices=[int(ids[0]), int(ids[-1])], | |
| checkpoint_epoch=checkpoint['epoch'], checkpoint_sha256=digest(checkpoint_path), | |
| checkpoint_validation_mse=checkpoint['validation_mse'], | |
| selection_split=checkpoint['selection_split'], | |
| paper_rmse_mean=0.00134, paper_rmse_std=0.00162, | |
| elapsed_seconds=time.monotonic() - start, | |
| slurm_job_id=os.environ.get('SLURM_JOB_ID')) | |
| result_dir = resolve(cfg['paths']['results']) | |
| result_dir.mkdir(parents=True, exist_ok=True) | |
| np.savez_compressed(result_dir / 'test_predictions.npz', prediction=pred.numpy(), | |
| reference=y.numpy(), initial=u.numpy(), latent=latent.numpy(), | |
| sample_ids=ids, x=np.linspace(0, 1, 33), times=times.numpy()) | |
| with (result_dir / 'test_per_sample.csv').open('w', newline='') as file: | |
| writer = csv.writer(file) | |
| writer.writerow(['sample_id', 'rmse', 'relative_l2']) | |
| writer.writerows(zip(ids, rmse_i, relative_i)) | |
| save_json(result_dir / 'test_metrics.json', summary) | |
| update_run_manifest(cfg, status='inference_completed', test_samples=len(ids), | |
| test_indices=[int(ids[0]), int(ids[-1])], | |
| test_metrics_file='test_metrics.json') | |
| print(f'INDEPENDENT TEST n={len(ids)} RMSE mean={summary["trajectory_rmse_mean"]:.9e} ' | |
| f'std(ddof1)={summary["trajectory_rmse_std_ddof1"]:.9e} ' | |
| f'global_RMSE={summary["global_rmse"]:.9e} ' | |
| f'relative_L2={summary["relative_l2_mean"]:.9e}', flush=True) | |
| print(f'Table 1(a) units 1e-3: {summary["trajectory_rmse_mean"] * 1000:.4f} ' | |
| f'({summary["trajectory_rmse_std_ddof1"] * 1000:.4f}); paper 1.34 (1.62)', flush=True) | |
| if __name__ == '__main__': | |
| main() | |