TorNet-Oracle / README.md
Wonder-Griffin's picture
Upload 8 files
228af26 verified
|
raw
history blame
2.7 kB
---
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
```python
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,)