synthetic_heavy_tail
Unconditional reference models trained with gendynamics. The weights correspond to the best validation epoch.
Dataset
Synthetic isotropic alpha-stable samples. Generated by gendynamics.datasets.fetch_synthetic_data('alpha_stable'). Sample the configured distribution, then make a seeded random train/validation/test split.
The train/validation/test splits contain 25,000/1,000/10,000 samples
of shape [150]. Normalization: None
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 gendynamics. 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": 240,
"depth": 4,
"time_dim": 128,
"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 | 693,894 | 128 | 0.0005 | 640 / 588 | 31.33 | 10.01 |
| dlpm-eps | DLPM-Eps | noise | 693,894 | 128 | 0.0005 | 311 / 211 | 1.009 | 1.12 |
| tedm-origin | t-EDM | denoised data | 693,894 | 64 | 0.0005 | 132 / 32 | 2.061 | 6.193 |
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": 1024,
"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": 400,
"cosine_eta_min_ratio": 0.05,
"freq_logging": 50,
"stats_freq_epochs": 1,
"log_grad_norm": true,
"ckpt_freq_epochs": 64,
"ckpt_keep_last": 8
}
}
DLPM-Eps (dlpm-eps/)
{
"model_parameters": {
"n_steps": 128,
"alpha": 1.8,
"sampler": "native"
},
"training": {
"device": "cuda",
"data_device": "cpu",
"batch_size": 1024,
"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": 400,
"cosine_eta_min_ratio": 0.05,
"freq_logging": 50,
"stats_freq_epochs": 1,
"log_grad_norm": true,
"ckpt_freq_epochs": 64,
"ckpt_keep_last": 8
}
}
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": 1024,
"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": 400,
"cosine_eta_min_ratio": 0.05,
"freq_logging": 50,
"stats_freq_epochs": 1,
"log_grad_norm": true,
"ckpt_freq_epochs": 64,
"ckpt_keep_last": 8
}
}
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/alpha-stable-1p7-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.