Skip to main content

Weather Forecasting with Graph Neural Networks

Project description

Graph Weather

All Contributors

Implementation of the Graph Weather paper (https://arxiv.org/pdf/2202.07575.pdf) in PyTorch. Additionally, an implementation of a modified model that assimilates raw or processed observations into analysis files.

Installation

This library can be installed through

pip install graph-weather

Example Usage

The models generate the graphs internally, so the only thing that needs to be passed to the model is the node features in the same order as the lat_lons.

import torch
from graph_weather import GraphWeatherForecaster
from graph_weather.models.losses import NormalizedMSELoss

lat_lons = []
for lat in range(-90, 90, 1):
    for lon in range(0, 360, 1):
        lat_lons.append((lat, lon))
model = GraphWeatherForecaster(lat_lons)

# Generate 78 random features + 24 non-NWP features (i.e. landsea mask)
features = torch.randn((2, len(lat_lons), 102))

target = torch.randn((2, len(lat_lons), 78))
out = model(features)

criterion = NormalizedMSELoss(lat_lons=lat_lons, feature_variance=torch.randn((78,)))
loss = criterion(out, target)
loss.backward()

And for the assimilation model, which assumes each lat/lon point also has a height above ground, and each observation is a single value + the relative time. The assimlation model also assumes the desired output grid is given to it as well.

import torch
import numpy as np
from graph_weather import GraphWeatherAssimilator
from graph_weather.models.losses import NormalizedMSELoss

obs_lat_lons = []
for lat in range(-90, 90, 7):
    for lon in range(0, 180, 6):
        obs_lat_lons.append((lat, lon, np.random.random(1)))
    for lon in 360 * np.random.random(100):
        obs_lat_lons.append((lat, lon, np.random.random(1)))

output_lat_lons = []
for lat in range(-90, 90, 5):
    for lon in range(0, 360, 5):
        output_lat_lons.append((lat, lon))
model = GraphWeatherAssimilator(output_lat_lons=output_lat_lons, analysis_dim=24)

features = torch.randn((1, len(obs_lat_lons), 2))
lat_lon_heights = torch.tensor(obs_lat_lons)
out = model(features, lat_lon_heights)
assert not torch.isnan(out).all()
assert out.size() == (1, len(output_lat_lons), 24)

criterion = torch.nn.MSELoss()
loss = criterion(out, torch.randn((1, len(output_lat_lons), 24)))
loss.backward()

Pretrained Weights

Coming soon! We plan to train a model on GFS 0.25 degree operational forecasts, as well as MetOffice NWP forecasts. We also plan trying out adaptive meshes, and predicting future satellite imagery as well.

Training Data

Training data will be available through HuggingFace Datasets for the GFS forecasts. The initial set of data is available for GFSv16 forecasts, raw observations, and FNL Analysis files from 2016 to 2022, and for ERA5 Reanlaysis. MetOffice NWP forecasts we cannot redistribute, but can be accessed through CEDA.

Contributors ✨

Thanks goes to these wonderful people (emoji key):

Jacob Bieker
Jacob Bieker

💻
Jack Kelly
Jack Kelly

🤔
byphilipp
byphilipp

🤔
Markus Kaukonen
Markus Kaukonen

💬
MoHawastaken
MoHawastaken

🐛
Mihai
Mihai

💬
Vitus Benson
Vitus Benson

🐛
dongZheX
dongZheX

💬
sabbir2331
sabbir2331

💬
Lorenzo Breschi
Lorenzo Breschi

💻
gbruno16
gbruno16

💻

This project follows the all-contributors specification. Contributions of any kind welcome!

Project details


Release history Release notifications | RSS feed

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

graph_weather-1.0.94.tar.gz (132.6 kB view details)

Uploaded Source

Built Distribution

graph_weather-1.0.94-py3-none-any.whl (147.7 kB view details)

Uploaded Python 3

File details

Details for the file graph_weather-1.0.94.tar.gz.

File metadata

  • Download URL: graph_weather-1.0.94.tar.gz
  • Upload date:
  • Size: 132.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.9.21

File hashes

Hashes for graph_weather-1.0.94.tar.gz
Algorithm Hash digest
SHA256 59500eb73b0c33a63bc0572ffb037a34c5f1bc115968e8d6c38da4c245dd2aa0
MD5 db04a7a3c576c1176bd8148ba43a9c91
BLAKE2b-256 d9998b2412a92723224feb21ec4ff09b785b574af2d5fa5190005fee3d403178

See more details on using hashes here.

File details

Details for the file graph_weather-1.0.94-py3-none-any.whl.

File metadata

  • Download URL: graph_weather-1.0.94-py3-none-any.whl
  • Upload date:
  • Size: 147.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.9.21

File hashes

Hashes for graph_weather-1.0.94-py3-none-any.whl
Algorithm Hash digest
SHA256 fff88c405166b835399e520c5aee8c05b097600c20ec7b617c9081b785e6d563
MD5 3625ca2220e673af92a1f04d04d74821
BLAKE2b-256 a9a3a57b7b543658d59ed177b202acf170b865625e35cd2550d85a32bf6a247f

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page