Trained on 2,081 storm-centered crops from 19 Atlantic storms between 2018 and 2024, after removing frames with missing data, labeled against the NOAA best track, and tested once on the 2025 season.
Hurricane Michael over roughly three days in October 2018, from a disorganized tropical storm to a category 5 at landfall. Every frame is centered on the best-track position and shown exactly as the network receives it, at 224 by 224 pixels. The middle label is interpolated between six-hourly fixes; the outer two are true fixes.
Parse the NOAA HURDAT2 best track, drop entries the record marks extratropical, and interpolate the six-hourly fixes to hourly.
Match each position to the nearest GOES-16 ABI band 13 scan (GOES-19 for the 2025 test), accepting a time offset of up to ten minutes and logging it.
Cut a 600 kilometer box around the storm center, working in the satellite's own fixed-grid projection so the box stays square on the ground.
Clamp brightness temperature to 180–320 K, resize to 224 by 224, and regress wind speed directly with a ResNet-18.
Split the data by storm rather than by frame. Hourly frames of the same storm are near-duplicates, so a random split would leak the answer.
Train the same network ten times with different random seeds, keep each run's checkpoint with the lowest validation error, and average the ten predictions with equal weight. The ten are then frozen by hash.
The ensemble was frozen, then run once on the six Atlantic storms of 2025: Dexter, Erin, Gabrielle, Humberto, Imelda and Melissa. Nothing in the work had touched them. That is 1,045 frames, all from GOES-19, a newer satellite than any training frame. Mean absolute error is 9.78 knots; the original single model scores 12.13 on the same frames.
| Category | Frames | MAE (kt) | Bias (kt) | Original MAE |
|---|---|---|---|---|
| Depression | 22 | 7.59 | +7.59 | 8.28 |
| Storm | 456 | 8.58 | +3.62 | 10.84 |
| Category 1 | 166 | 9.42 | −6.29 | 10.01 |
| Category 2 | 129 | 8.78 | −6.42 | 13.28 |
| Category 3 | 84 | 15.29 | −7.90 | 17.84 |
| Category 4 | 137 | 9.85 | −6.25 | 12.69 |
| Category 5 | 51 | 15.81 | −15.75 | 18.43 |
The 2025 test, by Saffir–Simpson category of the best-track wind. Bias is the mean signed error, so a negative figure means the ensemble guessed low. The last column is the original single model on the same frames; the ensemble is better or equal in every category.
| Storm | Frames | MAE (kt) | Original MAE |
|---|---|---|---|
| Dexter | 73 | 6.13 | 8.29 |
| Erin | 277 | 9.88 | 13.66 |
| Gabrielle | 185 | 8.24 | 10.37 |
| Humberto | 163 | 11.73 | 13.43 |
| Imelda | 103 | 8.91 | 10.71 |
| Melissa | 244 | 10.98 | 12.61 |
The same test, storm by storm. The spread between storms, 6.1 to 11.7 knots, is larger than the 1.2-knot change from the development storms, so six storms from one season are a small sample.
The nine storms held out during development (2020–2024, GOES-16), not the 2025 test: 1,752 frames, each predicted by the ensemble. The diagonal is perfect agreement; the 315 true best-track fixes are filled and interpolated labels are drawn open. Best-track winds come in five-knot steps, which is why the points stand in columns. The ensemble's error here is 8.57 knots, but these storms helped choose the training setup, so that figure is optimistic; the 2025 number above is the one to quote.
Loading frames…
Every hour of Hurricane Ian, from a depression east of the Windward Islands on 22 September 2022 to landfall in South Carolina on 30 September. Ian is one of the nine storms held out during development, so every reading is the ensemble's out-of-sample estimate from a single frame. Before the peak it stays within about seven knots on average. At the 140-knot peak on 28 September it reads 118, and its highest reading anywhere is 126. After the peak it runs about eleven knots low. Its line is the busier of the two: the best track is interpolated hourly between six-hourly fixes and can only bend in straight lines, while the model answers every frame on its own.
The ensemble underestimates category 5 by about 16 knots on 2025 and 19 on the development storms, and averaging ten networks cannot fix that: a shared bias survives the average. Melissa peaked at 165 knots, above anything in training (160), and her eight frames above 160 knots got 133 to 143. That looks like a ceiling, though it can't be separated from the general category 5 shortfall.
At the other end it reads weak systems high, by about eight knots for depressions and four for tropical storms in 2025. Category 3 is the worst band below category 5, at 15.3 knots.
Error on 2025 is 1.2 knots higher than on the development storms. Every 2025 frame comes from GOES-19 and every training frame from older storms on GOES-16, so the test can't say how much of that is the instrument and how much is the storms.
The first version of this page quoted 9.00 knots from a single training run. Rerunning the same recipe 33 times with different random seeds gave a mean of 10.05 knots on the same held-out storms, and only one rerun in 33 did as well. Since then every result is an ensemble or a comparison across many seeds.
Training on 19 storms instead of 9 lowered error on the nine held-out development storms by 1.6 knots and cut the high-end underestimate by 5.4 knots, passing all three tests set in advance. The larger set also had more frames, so “more storms” and “more data” can't be fully separated.
Going further, from 19 storms to 50 at the same training budget, made no significant difference (0.53 knots worse, not significant), and those runs were flagged as under-trained, so the honest reading is “not at this budget”.
Training four times longer lowered error on the development storms by about one knot (0.99) across 20 paired seeds. A new ten-network ensemble trained that way is frozen and waits for its own one-time test on the 2026–2027 storms.
No change so far has removed the category 5 shortfall, about 19 knots low on the development storms. Storms stronger than anything in training, like Melissa, make it worse.
Work is under way on adding East Pacific storms to training. A separate East Pacific test set stays sealed under a protocol fixed in advance.
Each phase-2 experiment's design, analysis script and pass thresholds are written down and committed before any training run, and the outcome is reported as the script prints it. A separate AI review session, instructed to break each design, recomputes the results before they are accepted.
This section shows the original single model (best_model.pt), not the ensemble.
Grad-CAM shows which regions pushed the model's estimate up. The network's last convolutional layer is the final place where what it detected still has a location attached, so weighting those feature maps by the gradient of the predicted wind speed shows which regions raised the estimate. That layer is a 7 by 7 grid before it is stretched back over the frame. Each cell covers roughly 85 kilometers of the 600 kilometer crop, so what follows shows regions, not fine structure.
Across 454 frames above 96 knots from four storms the network never trained on, attribution overlaps the coldest cloud tops far more than chance: a mean correlation near +0.57, with almost no frame negative. Below hurricane strength the same measurement is noisy, with no reliable direction. The model attends most clearly at the intensities where it is least accurate.
Original model (best_model.pt). Four different storms near peak intensity, all held out of its training. In each, attribution concentrates on the central deep convection, a filled region over the dense overcast rather than a ring on the eyewall. The overlay is transparent below a threshold, so plain gray means attribution there was below it.
Here the attributed region sits in a corner of the frame, away from the storm's most organized convection. That placement isn't consistent across weak-intensity frames as a group.
This section shows the ten-network ensemble behind the headline numbers, measured the same way as the original model above.
Each of the ten networks gets its own Grad-CAM map, scaled from 0 to 1 as above. The ensemble's map is their average, rescaled the same way. The frames are the same 454 frames above 96 knots from the same four storms. None of the ten networks trained on these storms, but they are held-out development storms, not a test.
The ensemble's attribution also overlaps the coldest cloud tops far more than chance. Its mean correlation is +0.51, lower than the original model's +0.57; the medians are +0.53 and +0.61. Six of the 454 frames are negative, against three for the original model.
The ensemble's maps are tighter. In the median frame, the region above the overlay's threshold covers 24% of the frame, against 40% for the original model, and its peak sits closer to the coldest pixel.
Ensemble of ten networks. These are the same four frames as above, with the same color scale and threshold. Attribution again sits on the central deep convection, in a smaller region than the original model's.