Le référentiel de code pour le PDEBENCH PAPER NEIRIPS 2022: une étendue de référence pour l'apprentissage automatique scientifique
? Simtech Best Paper Award 2023 ?
PDebench fournit un ensemble diversifié et complet de repères pour l'apprentissage de la machine scientifique, y compris des problèmes physiques difficiles et réalistes. Ce référentiel se compose du code utilisé pour générer les ensembles de données, pour télécharger et télécharger les ensembles de données à partir du référentiel de données, ainsi que pour former et évaluer différents modèles d'apprentissage automatique en tant que lignes de base. PDebench propose une gamme beaucoup plus large de PDE que les repères existants et comprend des problèmes réalistes et difficiles (à la fois en avant et inverse), des ensembles de données prêts à l'emploi plus élevés comprenant diverses conditions initiales et aux limites et les paramètres PDE. De plus, Pdebench a été créé pour rendre le code source extensible et nous invitons la participation active de la communauté SCIML pour améliorer et étendre la référence.
Créé et entretenu par Makoto Takamoto <[email protected], [email protected]>
, Timothy Praditia <[email protected]>
, Raphael Leiteritz, Dan Mackinlay, Francesni Alesiani, Dirk Pflüger, et Mathelay, Francesnitco
Nous fournissons également des ensembles de données et des modèles d'apprentissage automatique pré-entraînés.
Ensembles de données PDebench: https://darus.uni-stuttgart.de/dataset.xhtml?persistentid=doi:10.18419/darus-2986
Modèles pré-entraînés PDebench: https://darus.uni-stuttgart.de/dataset.xhtml?persistentid=doi:10.18419/darus-2987
Dois
Localement:
pip install --upgrade pip wheel
pip install .
De PYPI:
pip install pdebench
Pour inclure les dépendances pour la génération de données:
pip install " pdebench[datagen310] "
pip install " .[datagen310] " # locally
ou
pip install " pdebench[datagen39] "
pip install " .[datagen39] " # locally
Pour le support GPU, il existe des instructions supplémentaires spécifiques à la plate-forme:
Pour Pytorch, la dernière version que nous prenons en charge est V1.13.1 Voir Versions précédentes / # Linux - CUDA 11.7.
Pour Jax, qui est environ 6 fois plus rapide pour les simulations que Pytorch dans nos tests, voir Jax # Pip-Istallation-gpu-Cuda-Installed-Via-Pip
Si vous aimez, vous pouvez également installer des dépendances à l'aide d'Anaconda, nous suggérons d'utiliser Mambaforge comme distribution. Sinon, vous devrez peut-être activer la chaîne Conda-Forge pour les commandes suivantes.
À partir d'un environnement frais:
conda create -n myenv python=3.9
conda activate myenv
Installez les dépendances pour la formation des modèles:
conda install deepxde hydra-core h5py -c conda-forge
Selon votre disponibilité matérielle, installez Pytorch avec le support CUDA:
conda install pytorch==1.13.1 torchvision==0.14.1 torchaudio==0.13.1 pytorch-cuda=11.7 -c pytorch -c nvidia
conda install pytorch==1.13.1 torchvision==0.14.1 torchaudio==0.13.1 cpuonly -c pytorch
Dépendances facultatives pour la génération de données:
conda install clawpack jax jaxlib python-dotenv
Dans nos tests, nous avons utilisé Pytorch comme backend pour Deepxde. Veuillez suivre la documentation pour l'activer.
Les codes de génération de données sont contenus dans Data_gen:
gen_diff_react.py
pour générer les données de réaction de diffusion 2D.gen_diff_sorp.py
pour générer les données de diffusion 1D.gen_radial_dam_break.py
pour générer les données 2D peu profondes.gen_ns_incomp.py
pour générer les données de Navier-Stokes incompressibles incompressibles 2D.plot.py
pour tracer les données générées.uploader.py
pour télécharger les données générées dans le référentiel de données..env
est les données d'environnement pour stocker l'URL et le jeton API Dataverse pour télécharger les données générées. Notez que le nom de fichier doit être strictement .env
(c'est-à-dire supprimer l' example
du nom de fichier)configs
contient les fichiers YAML stockant la configuration de la simulation. Les arguments pour la simulation sont des explications spécifiques au problème et détaillées peuvent être trouvées dans les scripts de simulation.src
contient les scripts de simulation pour différents problèmes: sim_diff_react-py
pour la diffusion 2D, sim_diff_sorp.py
pour la diffusion 1D-Sorption et swe
pour l'équation d'eau peu profonde.Les codes de génération de données sont contenus dans data_gen_nle:
utils.py
util Fichier pour la génération de données, principalement les conditions aux limites et les conditions initiales.
Répertoire AdvectionEq
avec les codes source pour générer des échantillons de formation d'équation d'advection 1D
Répertoire BurgersEq
avec les codes source pour générer des échantillons de formation d'équation des hamburgers 1D
Répertoire CompressibleFluid
avec les codes source pour générer des échantillons de formation d'équations Navier-Stokes compressibles
ReactionDiffusionEq
avec les codes source pour générer des échantillons de formation d'équation de diffusion de réaction 1D ( Remarque: les données Darcyflow peuvent être générées par run_darcyflow2d.sh dans ce dossier. ) save
le répertoire économisant les échantillons de formation générés
Un exemple typique pour générer des échantillons de formation (équation d'advection 1D): (dans data_gen/data_gen_NLE/AdvectionEq/
)
python3 advection_multi_solution_Hydra.py +multi=beta1e0.yaml
qui est supposé être effectué dans chaque répertoire.
Des exemples de génération d'autres PDE sont fournis dans run_trainset.sh
dans les répertoires de chaque PDE. Les fichiers de configuration pour HYDRA sont stockés dans le répertoire config
dans le répertoire de chaque PDE.
Advection 1D / hamburgers / réaction-diffusion / 2D Darcyflow / Compressible Navier-Stokes Equations Enregistrer les données en tant que réseau Numpy. Ainsi, pour lire ces données via nos dataloaders, la transformation / la fusion des données doit être effectuée. Cela peut être fait à l'aide data_gen_NLE/Data_Merge.py
dont le fichier de configuration est situé sur: data_gen/data_gen_NLE/config/config.yaml
. Après avoir correctement réglé les paramètres dans le fichier de configuration (type: nom de PDES, dim: nombre de dimension spatiale, BD: condition aux limites), le fichier HDF5 correspondant peut être obtenu comme:
python3 Data_Merge.py
Vous pouvez définir les valeurs par défaut pour les emplacements de données pour ce projet en mettant des Vars comme celle-ci dans le fichier .env
:
WORKING_DIR=~/Data/Working
ARCHIVE_DATA_DIR=~/Data/Archive
Il y en a un exemple dans example.env
.
Les scripts de téléchargement sont fournis dans Data_download. Il existe deux options pour télécharger des données.
download_direct.py
( recommandé )download_easydataverse.py
(pourrait être lent et vous pouvez rencontrer des erreurs / problèmes; donc, non recommandée!)config
qui contient les fichiers YAML stockant la configuration. Tous les fichiers de l'ensemble de données correspondant args.filename
seront téléchargés dans args.data_folder
. Dans ce travail, nous fournissons trois modèles ML différents à former et évalués par rapport aux ensembles de données de référence, à savoir FNO, U-Net et PINN. Les codes pour les implémentations du modèle de base sont contenus dans les modèles:
train_models_forward.py
est le script principal pour former et évaluer le modèle. Il appellera le script spécifique au modèle basé sur l'argument d'entrée.train_models_inverse.py
est le script principal pour former et évaluer le modèle de problèmes inverses. Il appellera le script spécifique au modèle basé sur l'argument d'entrée.metrics.py
est le script pour évaluer les modèles formés sur la base de diverses mesures d'évaluation décrites dans notre article. De plus, il trace également les données de prédiction et cibles.analyse_result_forward.py
est le script pour convertir le fichier de cornichon enregistré du script de calcul de métriques au format Pandas DataFrame et l'enregistrer en tant que fichier CSV. De plus, il trace également un graphique à barres pour comparer les résultats entre les différents modèles.analyse_result_inverse.py
est le script pour convertir le fichier de cornichon enregistré du script de calcul de métriques en format Pandas DataFrame et l'enregistrer en tant que fichier CSV. Ce script est utilisé pour les problèmes inverses. De plus, il trace également un graphique à barres pour comparer les résultats entre les différents modèles.fno
contient les scripts de l'implémentation FNO. Ceux-ci sont en partie adaptés du référentiel FNO.unet
contient les scripts de l'implémentation U-Net. Ceux-ci sont en partie adaptés du référentiel U-Net.pinn
contient les scripts de l'implémentation de PINN. Ceux-ci utilisent la bibliothèque Deepxde.inverse
contient le modèle pour le modèle inverse basé sur le gradient.config
contient les fichiers YAML pour l'entrée de formation du modèle. Les modèles par défaut pour différentes équations sont fournis dans le répertoire Args. L'utilisateur a juste besoin de les copier et de les coller sur le mot clé Args dans le fichier config.yaml.Un exemple pour exécuter la formation du modèle avant peut être trouvé dans run_forward_1d.sh, et un exemple pour exécuter la formation du modèle inverse peut être trouvé dans run_inverse.sh.
Nous fournissons les ensembles de données de référence que nous avons utilisés dans le document via notre référentiel de données DARUS. La configuration de génération de données peut être trouvée dans le document. De plus, les modèles pré-entraînés sont également disponibles pour être téléchargés à partir du référentiel DARUS des modèles prélevés PDebench. Pour utiliser les modèles pré-entraînés, les utilisateurs peuvent spécifier l'argument continue_training: True
dans le fichier de configuration.
Vous trouverez ci-dessous une illustration de la structure du répertoire de Pdebench.
pdebench
|_? models
|_? pinn # Model: Physics-Informed Neural Network
|_? train.py
|_? utils.py
|_? pde_definitions.py
|_? fno # Model: Fourier Neural Operator
|_? train.py
|_? utils.py
|_? fno.py
|_? unet # Model: U-Net
|_? train.py
|_? utils.py
|_? unet.py
|_? inverse # Model: Gradient-Based Inverse Method
|_? train.py
|_? utils.py
|_? inverse.py
|_? config # Config: All config files reside here
|_? train_models_inverse.py
|_? run_forward_1D.sh
|_? analyse_result_inverse.py
|_? train_models_forward.py
|_? run_inverse.sh
|_? metrics.py
|_? analyse_result_forward.py
|_? data_download # Data: Scripts to download data from DaRUS
|_? config
|_? download_direct.py
|_? download_easydataverse.py
|_? visualize_pdes.py
|_? README.md
|_? download_metadata.csv
|_? data_gen # Data: Scripts to generate data
|_? configs
|_? data_gen_NLE
|_? src
|_? notebooks
|_? gen_diff_sorp.py
|_? plot.py
|_? example.env
|_? gen_ns_incomp.py
|_? gen_diff_react.py
|_? uploader.py
|_? gen_radial_dam_break.py
|_? __init__.py
Veuillez citer les articles suivants si vous utilisez des ensembles de données PDebench et / ou un code source dans votre recherche.
@inproceedings{PDEBench2022,
author = {Takamoto, Makoto and Praditia, Timothy and Leiteritz, Raphael and MacKinlay, Dan and Alesiani, Francesco and Pflüger, Dirk and Niepert, Mathias},
title = {{PDEBench: An Extensive Benchmark for Scientific Machine Learning}},
year = {2022},
booktitle = {36th Conference on Neural Information Processing Systems (NeurIPS 2022) Track on Datasets and Benchmarks},
url = {https://arxiv.org/abs/2210.07182}
}
@data{darus-2986_2022,
author = {Takamoto, Makoto and Praditia, Timothy and Leiteritz, Raphael and MacKinlay, Dan and Alesiani, Francesco and Pflüger, Dirk and Niepert, Mathias},
publisher = {DaRUS},
title = {{PDEBench Datasets}},
year = {2022},
doi = {10.18419/darus-2986},
url = {https://doi.org/10.18419/darus-2986}
}
@article{cape-takamoto:2023,
author = {Makoto Takamoto and
Francesco Alesiani and
Mathias Niepert},
title = {Learning Neural {PDE} Solvers with Parameter-Guided Channel Attention},
journal = {CoRR},
volume = {abs/2304.14118},
year = {2023},
url = {https://doi.org/10.48550/arXiv.2304.14118},
doi = {10.48550/arXiv.2304.14118},
eprinttype = {arXiv},
eprint = {2304.14118},
}
@inproceedings{vcnef-vectorized-conditional-neural-fields-hagnberger:2024,
author = {Hagnberger, Jan and Kalimuthu, Marimuthu and Musekamp, Daniel and Niepert, Mathias},
title = {{Vectorized Conditional Neural Fields: A Framework for Solving Time-dependent Parametric Partial Differential Equations}},
year = {2024},
booktitle = {Proceedings of the 41st International Conference on Machine Learning (ICML 2024)}
}
@article{active-learn-neuralpde-benchmark-musekamp:2024,
author = {Daniel Musekamp and
Marimuthu Kalimuthu and
David Holzm{"{u}}ller and
Makoto Takamoto and
Mathias Niepert},
title = {Active Learning for Neural {PDE} Solvers},
journal = {CoRR},
volume = {abs/2408.01536},
year = {2024},
url = {https://doi.org/10.48550/arXiv.2408.01536},
doi = {10.48550/ARXIV.2408.01536},
eprinttype = {arXiv},
eprint = {2408.01536},
}
Le MIT sous licence, sauf le cas échéant. Voir le fichier LICENSE.txt
.