metadata
library_name: pytorch
license: mit
datasets:
- TorNet
tags:
- weather
- radar
- tornado
- NEXRAD
- MRMS
- HRRR
- lightning
metrics:
- auprc
- f1
- accuracy
- brier
- ece
pipeline_tag: image-classification
Wonder-Griffin/tornado-super-predictor
TornadoSuperPredictor from Storm-Oracle, trained on TorNet (Zenodo) patches.
Outputs a tornado probability per patch (optionally with atmospheric features).
Summary
- Data: TorNet (official split); optional recent holdout recommended.
- Architecture: CNN feature extractor + heads (probability, EF logits, location, timing, uncertainty).
- Temporal: 3 volume(s) stacked as channels.
- Normalization: zscore.
- Loss: bce (pos_weight=2.0).
- Calibration: Platt (A,B)=n/a,n/a; Temperature T=n/a.
Intended Use
- Research on tornado nowcasting from radar patches;
- Evaluation under class imbalance with PR metrics;
- Not an operational warning system without further validation & human oversight.
Dataset
- Train examples: 6
- Eval examples: 4
- Class balance: positives=n/a, negatives=n/a, pos_weight≈2.0
Evaluation (threshold = 0.5)
Confusion matrix (rows = truth, cols = prediction):
| Pred 0 | Pred 1 | |
|---|---|---|
| True 0 | 0 | 2 |
| True 1 | 0 | 2 |
Metrics:
- AUPRC: n/a
- Accuracy: n/a
- (Optional): attach PR curve & reliability diagrams
Training
- Optimizer: AdamW (lr=1e-4, wd=1e-4 by default)
- Batch size: n/a
- Epochs: n/a
- Precision: 16-mixed
- Augmentations: flips/rotations/intensity jitter + optional crops
- Hardware: 1× GPU (FP16 mixed)
How to use
from huggingface_hub import snapshot_download
import torch, os, importlib.util, sys
repo_id = "Wonder-Griffin/tornado-super-predictor"
local_dir = snapshot_download(repo_id)
sys.path.insert(0, local_dir)
from modeling import load, apply_temperature
device = "cuda" if torch.cuda.is_available() else "cpu"
model = load(device=device)
# x: torch.Tensor of shape (B, C, 256, 256), C = 3 * T
B = 1; C = 3*3
x = torch.randn(B, C, 256, 256, device=device)
# atmospheric dict (optional—batch-shaped)
atmo = {
"cape": torch.zeros(B,1, device=device),
"wind_shear": torch.zeros(B,4, device=device),
"helicity": torch.zeros(B,2, device=device),
"temperature": torch.zeros(B,3, device=device),
"dewpoint": torch.zeros(B,2, device=device),
"pressure": torch.zeros(B,1, device=device),
}
with torch.no_grad():
out = model(x, atmo)
prob = out["tornado_probability"] # (B,)