DOI: 10.5281/zenodo.13787832
title: Data and models for "Center-fixing of tropical cyclones using uncertainty-aware deep learning applied to high-temporal-resolution geostationary satellite imagery" by Lagerquist et al.

description: The file geocenter_models.tar contains all models comprising the GeoCenter ensemble: 3 convolutional neural networks (CNN), 3 isotonic-regression files (one for correcting each CNN’s mean estimate), and 3 more isotonic-regression files (one for correcting each CNN’s ensemble spread). Every model is found in a subdirectory whose names indicate which infrared (IR) wavelengths are used as input to the CNN. For example:





wavelengths-microns=3.900-7.340-13.300/model.weights.h5: An HDF5 file containing the trained CNN that uses data from bands 7, 10, 16 (corresponding to 3.9, 7.34, and 13.3 microns on the GOES ABI imager). The trained CNN can always be read by neural_net_utils.read_model() in the ml4tccf library (https://doi.org/10.5281/zenodo.15116854).




wavelengths-microns=3.900-7.340-13.300/model_metadata.p: A Pickle file containing metadata for the trained CNN. This file is needed to read the CNN itself with neural_net_utils.read_model(). Otherwise, you will probably never need to access this metafile directly.




wavelengths-microns=3.900-7.340-13.300/isotonic_regression/isotonic_regression.dill: A Dill file containing isotonic-regression models used to bias-correct the ensemble mean from the same CNN.  The trained isotonic-regression models can always be read by scalar_isotonic_regression.read_file() in the ml4tccf library. Note that there are technically two isotonic-regression models for every CNN’s ensemble mean: one that bias-corrects the x-coordinate of the TC-center, another that bias-corrects the y-coordinate.




wavelengths-microns=3.900-7.340-13.300/uncertainty_calibration/uncertainty_calibration.dill: A Dill file containing isotonic-regression models used to bias-correct the ensemble spread from the same CNN. In the ml4tccf code, I make a distinction between “isotonic_regression” (correcting the ensemble mean) and “uncertainty_calibration” (correcting the ensemble spread), but note that both models are isotonic regression and use the sklearn.isotonic.IsotonicRegression class. The trained uncertainty-calibration models can always be read by scalar_uncertainty_calibration.read_file() in the ml4tccf library. Again, note that there are technically two uncertainty-calibration models per CNN: one for spread in the x-coordinate, one for spread in the y-coordinate.



 

As mentioned above, every trained CNN can be read by neural_net_utils.read_model(). Also, every trained CNN can be applied to new data (inference mode) by neural_net_utils.apply_model(). The input argument model_object should be the object returned by neural_net_utils.read_model(), and I suggest setting num_examples_per_batch = 10 to avoid out-of-memory errors. The only other input argument is predictor_matrices, which is a list of two numpy arrays. The first numpy array contains IR imagery centered at the first-guess TC center, and the second numpy array contains ATCF scalars. The first numpy array should have dimensions S (number of TC samples) x 300 (grid rows) x 300 (grid columns) x 9 (lag times) x 3 (wavelengths). Lag times should be in the following order: 240, 210, 180, 150, 120, 90, 60, 30, 0 min ago.  Wavelengths should be in the order indicated by the subdirectory name.  The numpy array itself should contain normalized brightness temperatures at the given lag times and wavelengths, following the grid specifications laid out in the journal paper (a plate carrée grid with 2-km spacing). The original IR data (brightness temperatures) must be normalized to z-scores using the same normalization parameters as in the journal paper, i.e., those based on the training data. See details below. The second numpy array in predictor_matrices should have dimensions S (number of TC samples) x 9 (variables). The variables must in the order: absolute latitude, cosine of longitude, sine of longitude, TC intensity, minimum central pressure, tropical flag, subtropical flag, extratropical flag, disturbance flag. The journal paper contains details on all these variables in one table. These variables must come from A-deck files at the second-most recent synoptic time. Like the IR data, these ATCF scalars must be normalized to z-scores using the same normalization parameters as in the journal paper. See details below.

 

Once you have predictions (estimated TC-center locations) from a CNN, you can bias-correct these predictions. To read the isotonic-regression model for the given CNN’s ensemble mean, use scalar_isotonic_regression.read_file() in the ml4tccf library. To apply the same model, use scalar_isotonic_regression.apply_models(). For the CNN’s ensemble spread, use scalar_uncertainty_calibration.read_file() and scalar_uncertainty_calibration.apply_models().

 

To normalize the IR data, you will need the file ir_satellite_normalization_params.tar included with this dataset. Within the tar file is a single zarr file. You can read the zarr file with normalization.read_file() in the ml4tccf library; then you can normalize new data with normalization.normalize_data().

 

To normalize the ATCF data, you will need the file a_deck_normalization_params.nc included with this dataset. This is a NetCDF file, containing the full set of training values for all 5 ATCF variables that are normalized (the binary storm-type flags are not normalized). You can read this file using any of the standard Python methods for reading NetCDF files, such as xarray.open_dataset(). To normalize new ATCF data, you can use the method normalization._normalize_one_variable(), where the argument actual_values_training is the list of training values from a_deck_normalization_params.nc for the given variable, while actual_values_new is the list of values to be normalized (currently in physical units, to be converted to z-score units).