Sea ice forecasting using IceNet

Polar Modelling Standard Python

license binder jupyterhub render review

rohub doi

Context

Purpose

Demonstrate IceNet, a deep learning sea ice forecasting system trained using climate simulations and observational data.

Modelling approach

IceNet is a probabilistic, deep learning sea ice forecasting system. The model, an ensemble of U-Net networks, learns how sea ice changes from climate simulations and observational data to forecast up to 6 months of monthly-averaged sea ice concentration maps at 25 km resolution. IceNet advances the range of accurate sea ice forecasts, outperforming a state-of-the-art dynamical model in seasonal forecasts of summer sea ice, particularly for extreme sea ice events. IceNet was implemented in Python 3.7 using TensorFlow v2.2.0. Further details can be found in the Nature Communications paper Seasonal Arctic sea ice forecasting with probabilistic deep learning.

Highlights

  • Clone and access IceNet’s codebase to produce seasonal Arctic sea ice forecasts using 3 out of 25 five pre-trained IceNet models downloaded from the Polar Data Centre.

  • Forecast a single year, 2020, using IceNet’s preprocessed environmental input data downloaded from a Zenodo repository.

  • Visualise IceNet’s seasonal ice edge predictions at 4- to 1-month lead times.

  • Interactive plots comparing IceNet predictions against ECMWF SEAS5 physics-based sea ice concentration and a linear trend statistical benchmark.

Contributions

Notebook

  • Alejandro Coca-Castro (author), The Alan Turing Institute, @acocac

  • Tom R. Andersson (reviewer), British Antarctic Survey, @tom-andersson

  • Nick Barlow (reviewer), The Alan Turing Institute, @nbarlowATI

Modelling codebase

  • Tom R. Andersson (author), British Antarctic Survey, @tom-andersson

  • James Byrne (contributor), British Antarctic Survey, @JimCircadian

  • Tony Phillips (contributor), British Antarctic Survey

Modelling publications

  • Tom R Andersson, J Scott Hosking, María Pérez-Ortiz, Brooks Paige, Andrew Elliott, Chris Russell, Stephen Law, Daniel C Jones, Jeremy Wilkinson, Tony Phillips, James Byrne, Steffen Tietsche, Beena Balan Sarojini, Eduardo Blanchard-Wrigglesworth, Yevgeny Aksenov, Rod Downie, and Emily Shuckburgh. Seasonal arctic sea ice forecasting with probabilistic deep learning. Nature Communications, 12:5124, 2021. URL: https://doi.org/10.1038/s41467-021-25257-4, doi:10.1038/s41467-021-25257-4.

Modelling funding

The IceNet project was supported by Wave 1 of The UKRI Strategic Priorities Fund under the EPSRC Grant EP/T001569/1, particularly the AI for Science’ theme within that grant and The Alan Turing Institute.

Note

The notebook contributors acknowledge the IceNet developers for providing a fully reproducible and public code available at https://github.com/tom-andersson/icenet-paper. Some snippets from IceNet’s source code were adapted to this notebook.

Clone the IceNet GitHub repo

!git clone -q https://github.com/tom-andersson/icenet-paper.git notebook

Install dependencies (only for the Pangeo JupyterHub)

import os

if os.environ['CONDA_DEFAULT_ENV'] == 'notebook':
    !pip -q install tensorflow
    !pip -q install scitools-iris

Load libraries

# system
import sys
sys.path.insert(0, os.path.join(os.getcwd(), 'notebook', 'icenet'))

# data
import json
import pandas as pd
import numpy as np
import xarray as xr

# custom functions from the icenet repo
from utils import IceNetDataLoader, create_results_dataset_index, arr_to_ice_edge_arr

# modelling
from tensorflow.keras.models import load_model

# plotting
import matplotlib.pyplot as plt
from matplotlib.figure import Figure
from matplotlib.backends.backend_agg import FigureCanvas
from matplotlib.offsetbox import AnchoredText

import holoviews as hv

import hvplot.pandas
import hvplot.xarray

from bokeh.models.formatters import DatetimeTickFormatter

import panel as pn
pn.extension()

# utils
import urllib.request
import re
from tqdm.notebook import tqdm
import calendar
from pprint import pprint
import warnings
warnings.filterwarnings(action='ignore')

pd.options.display.max_columns = 10
hv.extension('bokeh', width=100)