神经2022纸pdebench的代码存储库:科学机器学习的广泛基准
? Simtech Best Paper Award 2023 ?
Pdebench为科学机器学习提供了多种基准,包括具有挑战性和现实的身体问题。该存储库由用于生成数据集的代码组成,从数据存储库中上传和下载数据集,以及训练和评估不同的机器学习模型作为基线。 PDEBENCH具有比现有基准的更大范围的PDE,并且包括现实且困难的问题(前进和逆向),包括各种初始和边界条件的较大的现成数据集以及PDE参数。此外,创建了PDEBENCH是为了使源代码可扩展,我们邀请SCIML社区的积极参与以改进和扩展基准。
由Takamoto Makoto <[email protected], [email protected]>
创建和<[email protected]>
我们还提供数据集和验证的机器学习模型。
pdebench数据集:https://darus.uni-stuttgart.de/dataset.xhtml?persistentId=doi:10.18419/darus-2986
PDEBENCH预培训模型:https://darus.uni-stuttgart.de/dataset.xhtml?
dois
本地:
pip install --upgrade pip wheel
pip install .
来自PYPI:
pip install pdebench
包括数据生成的依赖项:
pip install " pdebench[datagen310] "
pip install " .[datagen310] " # locally
或者
pip install " pdebench[datagen39] "
pip install " .[datagen39] " # locally
对于GPU支持,还有其他特定于平台的说明:
对于Pytorch,我们支持的最新版本是v1.13.1请参见以前的ver -versions/#linux -cuda 11.7。
对于我们的测试中的JAX比Pytorch快的速度约6倍,请参见JAX#pip-nastallation-gpu-cuda installed-via-pip
如果您还可以使用Anaconda安装依赖项,我们建议将Mambaforge用作分发。否则,您可能必须启用Conda-Forge频道以获取以下命令。
从新鲜的环境开始:
conda create -n myenv python=3.9
conda activate myenv
安装模型培训的依赖项:
conda install deepxde hydra-core h5py -c conda-forge
根据您的硬件可用性,要么安装带有CUDA支持的Pytorch:
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
数据生成的可选依赖性:
conda install clawpack jax jaxlib python-dotenv
在我们的测试中,我们使用Pytorch作为DeepXde的后端。请关注文档以启用此功能。
数据生成代码包含在data_gen中:
gen_diff_react.py
生成2D扩散反应数据。gen_diff_sorp.py
生成1D扩散吸附数据。gen_radial_dam_break.py
生成2D浅水数据。gen_ns_incomp.py
生成2D不均匀的Navier-Stokes数据。plot.py
绘制生成的数据。uploader.py
将生成的数据上传到数据存储库。.env
请注意,文件名应严格为.env
(即从文件名中删除example
)configs
Directory包含存储模拟配置的YAML文件。模拟的论点是特定于问题的,可以在模拟脚本中找到详细的解释。src
Directory包含有关不同问题的仿真脚本:用于2D扩散反应的sim_diff_react-py
, sim_diff_sorp.py
用于1D扩散 - 吸附,而swe
为浅水方程。数据生成代码包含在data_gen_nle中:
utils.py
Util文件用于数据生成,主要是边界条件和初始条件。
AdvectionEq
目录和源代码以生成1D对流方程训练样本
BurgersEq
目录带有源代码,以生成1D汉堡方程培训样品
带有源代码的CompressibleFluid
目录,以生成可压缩的Navier-Stokes方程训练样本
ReactionDiffusionEq
目录与源代码生成1D反应扩散方程训练样本(注意:Darcyflow数据可以通过此文件夹中的Run_darcyflow2d.sh生成。 ) save
目录保存生成的培训样品
生成训练样本的典型示例(1D对流方程):(在data_gen/data_gen_NLE/AdvectionEq/
)
python3 advection_multi_solution_Hydra.py +multi=beta1e0.yaml
假定在每个目录中执行。
每个PDE目录中的run_trainset.sh
中提供了生成其他PDE的示例。 Hydra的配置文件存储在每个PDE目录中的config
目录中。
1D对流/汉堡/反应 - 扩散/2D Darcyflow/可压缩的Navier-Stokes方程将数据保存为Numpy阵列。因此,要通过我们的数据加载程序读取这些数据,应执行数据转换/合并。可以使用data_gen_NLE/Data_Merge.py
的配置文件位于: data_gen/data_gen_NLE/config/config.yaml
。正确设置配置文件中的参数(类型:PDES的名称,DIM:空间维度的数量,BD:边界条件),可以将相应的HDF5文件作为:
python3 Data_Merge.py
您可以通过在.env
文件中放置这样的config vars来设置该项目的数据位置的默认值:
WORKING_DIR=~/Data/Working
ARCHIVE_DATA_DIR=~/Data/Archive
example.env
中有一个示例。
Data_download中提供了下载脚本。有两个选择可以下载数据。
download_direct.py
(推荐)download_easydataverse.py
(可能很慢,您可能会遇到错误/问题;因此,不建议!)config
配置的YAML文件的配置文件中的配置文件。数据集匹配args.filename
中的任何文件都将下载到args.data_folder
中。 在这项工作中,我们提供了三种不同的ML模型,以针对FNO,U-NET和PINN的基准数据集进行训练和评估。基线模型实现的代码包含在模型中:
train_models_forward.py
是训练和评估模型的主要脚本。它将根据输入参数调用特定于模型的脚本。train_models_inverse.py
是训练和评估逆问题模型的主要脚本。它将根据输入参数调用特定于模型的脚本。metrics.py
是根据本文中描述的各种评估指标评估训练模型的脚本。此外,它还绘制了预测和目标数据。analyse_result_forward.py
是将保存的泡菜文件从指标计算脚本转换为pandas dataframe格式并将其保存为CSV文件的脚本。此外,它还绘制条形图以比较不同模型之间的结果。analyse_result_inverse.py
是将保存的泡菜文件从指标计算脚本转换为pandas dataframe格式并将其保存为CSV文件的脚本。该脚本用于反问题。此外,它还绘制条形图以比较不同模型之间的结果。fno
包含FNO实现的脚本。这些部分是由FNO存储库改编的。unet
包含U-NET实现的脚本。这些部分是根据U-NET存储库改编的。pinn
包含Pinn实现的脚本。这些利用了Deepxde库。inverse
包含基于梯度的逆模型的模型。config
包含用于模型培训输入的YAML文件。 ARGS目录中提供了不同方程式的默认模板。用户只需要将它们复制并粘贴到config.yaml文件中的args关键字。可以在run_forward_1d.sh中找到运行正向模型训练的示例,可以在run_inverse.sh中找到运行反向模型训练的示例。
我们通过DARUS数据存储库在论文中使用的基准数据集。数据生成配置可以在论文中找到。此外,预处理的型号也可从Pdebench预验证的Darus存储库中下载。要使用验证的模型,用户可以指定参数continue_training: True
。
以下是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
如果您在研究中使用PDEBench数据集和/或源代码,请引用以下论文。
@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},
}
MIT许可,除非另有说明。请参阅LICENSE.txt
文件。