hrrr_west_hourly
Unconditional reference models trained with gendynamics. The weights correspond to the best validation epoch.
Dataset
NOAA HRRR analysis, distributed by dynamical.org. Upstream source. One hourly precipitation value per fixed western U.S. city, approximated by its nearest HRRR grid cell. Complete aligned hours at 150 cities are randomly split 25,000/1,000/65,000. Columns: Adelanto, CA, American Canyon, CA, Anacortes, WA, Anderson, CA, Antioch, CA, Arlington, WA, Arroyo Grande, CA, Ashland, OR, Avenal, CA, Baker City, OR, Barstow, CA, Bend, OR, Big Bear Lake, CA, Blaine, WA, Blythe, CA, Bremerton, WA, Calexico, CA, California City, CA, Chelan, WA, Chico, CA, Chowchilla, CA, Clearlake, CA, Coachella, CA, Connell, WA, Coos Bay, OR, Coronado, CA, Corvallis, OR, Davis, CA, Deer Park, WA, Desert Hot Springs, CA, El Paso de Robles (Paso Robles), CA, Ellensburg, WA, Escondido, CA, Eugene, OR, Eureka, CA, Florence, OR, Forest Grove, OR, Garden Grove, CA, Goleta, CA, Grants Pass, OR, Hemet, CA, Hollister, CA, Jurupa Valley, CA, Keizer, OR, Klamath Falls, OR, La Pine, OR, Lincoln City, OR, Lodi, CA, Lompoc, CA, Longview, WA, Los Angeles, CA, Los Banos, CA, Madras, OR, McFarland, CA, Monterey, CA, Montesano, WA, Moses Lake, WA, Needles, CA, Ocean Shores, WA, Ontario, OR, Palmdale, CA, Patterson, CA, Pendleton, OR, Placerville, CA, Port Angeles, WA, Portola, CA, Prineville, OR, Pullman, WA, Ridgecrest, CA, San Buenaventura (Ventura), CA, San Clemente, CA, San Francisco, CA, Sanger, CA, Santa Cruz, CA, Santa Rosa, CA, Shelton, WA, Snoqualmie, WA, South Lake Tahoe, CA, Sumner, WA, Sunnyside, WA, Susanville, CA, Sutherlin, OR, Sweet Home, OR, Taft, CA, Tehachapi, CA, The Dalles, OR, Tulare, CA, Twentynine Palms, CA, Ukiah, CA, Umatilla, OR, Union City, CA, Walla Walla, WA, Warrenton, OR, Washougal, WA, Wenatchee, WA, West Richland, WA, Wheatland, CA, Yakima, WA, Yelm, WA, Yreka, CA, Hines, OR, Oroville, WA, Bishop, CA, Alturas, CA, Jordan Valley, OR, Paisley, OR, Northport, WA, Dayville, OR, Crescent City, CA, Condon, OR, Nespelem, WA, Lostine, OR, Sprague, WA, Sonora, CA, King City, CA, Winthrop, WA, Prairie City, OR, Oakridge, OR, Garibaldi, OR, Dunsmuir, CA, Rockford, WA, Fort Bragg, CA, Ukiah, OR, Mammoth Lakes, CA, Idanha, OR, Avalon, CA, Halfway, OR, Lakeview, OR, San Joaquin, CA, LaCrosse, WA, Colusa, CA, Powers, OR, Creston, WA, Republic, WA, La Grande, OR, Arlington, OR, Roslyn, WA, Pe Ell, WA, Coulee City, WA, Calipatria, CA, Canyonville, OR, Morton, WA, Mitchell, OR, Heppner, OR, Truckee, CA, Point Arena, CA, Shaniko, OR, Concrete, WA, Odessa, WA, Riverside, WA.
The train/validation/test splits contain 25,000/1,000/65,000 samples
of shape [150]. Normalization: Per-coordinate training mean and standard deviation; zero deviations replaced by one. The processed dataset file hrrr_west_hourly_precip_150d.pt has SHA-256 524a64848afb4edaab346528f6684b1cb6c086f67e3126422433718a36e519a7.
The exact generator arguments or processed-file identity, split settings, and seed are in dataset.json.
The source data themselves are not redistributed here; source-data terms remain with their provider.
The preparation code is in datasets/2_hrrr_west_tabular_dataset.py in the training repository. API-backed sources can change; the processed-file checksum identifies this snapshot.
Architecture and training
All independently trained models use this network architecture:
{
"name": "mlp",
"params": {
"width": 128,
"depth": 3,
"time_dim": 64,
"dropout": 0.0,
"use_norm": true,
"dim": 150
}
}
| Directory | Model | Prediction target | Trainable parameters | Sampling steps | Learning rate | Epochs run / best | Val loss | Test loss |
|---|---|---|---|---|---|---|---|---|
| ddpm-v | DDPM-V | velocity | 171,798 | 128 | 0.0005 | 640 / 633 | 1.024 | 1.12 |
| dlpm-eps | DLPM-Eps | noise | 171,798 | 128 | 0.0005 | 439 / 339 | 0.7497 | 0.829 |
| tedm-origin | t-EDM | denoised data | 171,798 | 64 | 0.0005 | 640 / 640 | 0.633 | 0.5903 |
The complete selected final model and training settings are below and in each directory's config.json.
The training settings include the maximum epoch budget; epochs run / best reports what actually happened.
provenance.json records software versions and the source revision. Each model was reloaded and checked before upload;
export_check.json records that check. Losses use each model's own objective, so they are not comparable sample-quality scores.
The number of held-out rows used for each test loss is in metrics.json. Sample previews do not establish tail accuracy.
DDPM-V (ddpm-v/)
{
"model_parameters": {
"n_steps": 128,
"sigma_max": 2.0,
"sampler": "ddpm"
},
"training": {
"device": "cuda",
"data_device": "cpu",
"batch_size": 512,
"n_epochs": 640,
"early_stopping_patience": 100,
"lr": 0.0005,
"num_workers": 0,
"use_adamw": true,
"weight_decay": 1e-06,
"grad_clip_norm": 10.0,
"lr_schedule": "cosine",
"warmup_steps": 100,
"cosine_eta_min_ratio": 0.05,
"freq_logging": 16,
"stats_freq_epochs": 1,
"log_grad_norm": true,
"ckpt_freq_epochs": 64,
"ckpt_keep_last": 4
}
}
DLPM-Eps (dlpm-eps/)
{
"model_parameters": {
"n_steps": 128,
"alpha": 1.8,
"sampler": "native"
},
"training": {
"device": "cuda",
"data_device": "cpu",
"batch_size": 512,
"n_epochs": 640,
"early_stopping_patience": 100,
"lr": 0.0005,
"num_workers": 0,
"use_adamw": true,
"weight_decay": 1e-06,
"grad_clip_norm": 10.0,
"lr_schedule": "cosine",
"warmup_steps": 100,
"cosine_eta_min_ratio": 0.05,
"freq_logging": 16,
"stats_freq_epochs": 1,
"log_grad_norm": true,
"ckpt_freq_epochs": 64,
"ckpt_keep_last": 4
}
}
t-EDM (tedm-origin/)
{
"model_parameters": {
"n_steps": 64,
"nu": 2.2,
"sigma_min": 0.005,
"sigma_max": 5.0,
"sigma_data": 1.0,
"solver": "edm_stochastic_heun"
},
"training": {
"device": "cuda",
"data_device": "cpu",
"batch_size": 512,
"n_epochs": 640,
"early_stopping_patience": 100,
"lr": 0.0005,
"num_workers": 0,
"use_adamw": true,
"weight_decay": 1e-06,
"grad_clip_norm": 10.0,
"lr_schedule": "cosine",
"warmup_steps": 100,
"cosine_eta_min_ratio": 0.05,
"freq_logging": 16,
"stats_freq_epochs": 1,
"log_grad_norm": true,
"ckpt_freq_epochs": 64,
"ckpt_keep_last": 4
}
}
DDIM-V (ddim-v/) shares the trained DDPM-V weights. Only the reverse sampler changes to deterministic DDIM (eta=0); it has no separate training run. Its exact sampling settings are in ddim-v/config.json.
Loading
Install the training package and its dependencies:
python -m pip install git+https://github.com/Diffusion-Research-Lab/2_training_2026_tail_reference_models.git
Then load one of the listed model directories by its underscored name:
from toolkit.huggingface import load_huggingface_model
model, normalization, data_scale = load_huggingface_model("Diffusion-Research-Lab/hrrr-west-hourly-precipitation-150d-diffusion", "ddpm_v", device="cpu")
samples = model.sample(16).float().cpu()
if normalization is not None:
samples = samples * normalization["std"] + normalization["mean"]
The model-specific files are model.safetensors, config.json, dataset.json, metrics.json,
provenance.json, export_check.json, and, when applicable, normalization.safetensors.
This repository is released under the MIT license. Cite the model repository revision when using these weights.