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