El repositorio de códigos para el documento Neurips 2022 Pdebench: un punto de referencia extenso para el aprendizaje automático científico
? SIMTech Best Paper Award 2023 ?
PdeBench proporciona un conjunto diverso e integral de puntos de referencia para el aprendizaje automático científico, incluidos problemas físicos desafiantes y realistas. Este repositorio consiste en el código utilizado para generar los conjuntos de datos, cargar y descargar los conjuntos de datos del repositorio de datos, así como para entrenar y evaluar diferentes modelos de aprendizaje automático como líneas de base. PdeBench presenta una gama mucho más amplia de PDE que los puntos de referencia existentes e incluye problemas realistas y difíciles (tanto hacia adelante como inverso), conjuntos de datos listos más grandes que comprenden diversas condiciones iniciales y de contorno, y los parámetros de PDE. Además, PDebench fue creado para hacer que el código fuente sea extensible e invitamos a la participación activa de la comunidad SCIML para mejorar y extender el punto de referencia.
Creado y mantenido por Makoto Takamoto <[email protected], [email protected]>
, Timothy Praditia <[email protected]>
, Raphael Leiteritz, dan Mackinlay, francesco alesiani, dirk pfk phlü, y Mathiasgert.
También proporcionamos conjuntos de datos y modelos de aprendizaje automático previamente provocado.
Pdebench DataSets: https://darus.uni-stuttgart.de/dataset.xhtml?persistentid=doi:10.18419/darus-2986
PDEBIGH Modelos previamente entrenados: https://darus.uni-stuttgart.de/dataset.xhtml?persistentid=doi:10.18419/darus-2987
Dois
En la zona:
pip install --upgrade pip wheel
pip install .
De Pypi:
pip install pdebench
Para incluir dependencias para la generación de datos:
pip install " pdebench[datagen310] "
pip install " .[datagen310] " # locally
o
pip install " pdebench[datagen39] "
pip install " .[datagen39] " # locally
Para el soporte de GPU, existen instrucciones adicionales específicas de la plataforma:
Para Pytorch, la última versión que admitimos es V1.13.1 Ver versiones anteriores/#Linux - CUDA 11.7.
Para Jax, que es aproximadamente 6 veces más rápido para simulaciones que Pytorch en nuestras pruebas, consulte Jax#Pip-Installation-GPU-CUDA-VIA-PIP
Si lo desea, también puede instalar dependencias utilizando Anaconda, sugerimos usar Mambaforge como distribución. De lo contrario, es posible que deba habilitar el canal Conda-Forge para los siguientes comandos.
Comenzando desde un entorno fresco:
conda create -n myenv python=3.9
conda activate myenv
Instalar dependencias para la capacitación del modelo:
conda install deepxde hydra-core h5py -c conda-forge
Según su disponibilidad de hardware, instale Pytorch con soporte 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
Dependencias opcionales para la generación de datos:
conda install clawpack jax jaxlib python-dotenv
En nuestras pruebas utilizamos Pytorch como backend para Deepxde. Siga la documentación para habilitar esto.
Los códigos de generación de datos están contenidos en Data_Gen:
gen_diff_react.py
para generar los datos de reacción de difusión 2D.gen_diff_sorp.py
para generar los datos 1D de sed de difusión.gen_radial_dam_break.py
para generar los datos 2D de aguas poco profundas.gen_ns_incomp.py
para generar los datos de Navier-Stokes de Inhomogénea 2D 2D.plot.py
para trazar los datos generados.uploader.py
para cargar los datos generados en el repositorio de datos..env
son los datos del entorno para almacenar la URL de Dataverse y el token API para cargar los datos generados. Tenga en cuenta que el nombre de archivo debe ser estrictamente .env
(es decir, elimine el example
del nombre de archivo)configs
contiene los archivos YAML que almacenan la configuración para la simulación. Los argumentos para la simulación son una explicación específica del problema y se pueden encontrar una explicación detallada en los scripts de simulación.src
contiene los scripts de simulación para diferentes problemas: sim_diff_react-py
para la reacción de difusión 2D, sim_diff_sorp.py
para 1D-Sorción de difusión, y swe
para la ecuación de aguas poco profundas.Los códigos de generación de datos están contenidos en data_gen_nle:
utils.py
Util File para la generación de datos, principalmente condiciones de límite y condiciones iniciales.
Directorio AdvectionEq
con los códigos de origen para generar muestras de entrenamiento de ecuación de advección 1D
Directorio BurgersEq
con los códigos de origen para generar muestras de entrenamiento de ecuaciones de hamburguesas 1D
CompressibleFluid
Directorio con los códigos de origen para generar muestras de entrenamiento de ecuaciones de Navier-Stokes compresibles
ReactionDiffusionEq
Directory con los códigos de origen para generar 1D Reacción-Difusión de la ecuación de la ecuación de entrenamiento ( Nota: Darcyflow Los datos pueden ser generados por Run_Darcyflow2D.Sh en esta carpeta). save
directorio Guardar las muestras de entrenamiento generadas
Un ejemplo típico para generar muestras de entrenamiento (ecuación de advección 1D): (en data_gen/data_gen_NLE/AdvectionEq/
)
python3 advection_multi_solution_Hydra.py +multi=beta1e0.yaml
que se supone que se realiza en cada directorio.
Se proporcionan ejemplos para generar otros PDE en run_trainset.sh
en los directorios de cada PDE. Los archivos de configuración para HYDRA se almacenan en el directorio config
en el directorio de cada PDE.
1D advection/hamburguesas/reacción-difusión/2D Darcyflow/ecuaciones de Stokes Compressibles Guardar datos como una matriz Numpy. Entonces, para leer esos datos a través de nuestros dataloaders, se debe realizar la transformación/fusión de datos. Esto se puede hacer utilizando data_gen_NLE/Data_Merge.py
cuyo archivo de configuración se encuentra en: data_gen/data_gen_NLE/config/config.yaml
. Después de configurar correctamente los parámetros en el archivo de configuración (Tipo: Nombre de PDE, DIM: Número de dimensión espacial, BD: condición de límite), el archivo HDF5 correspondiente podría obtenerse como:
python3 Data_Merge.py
Puede establecer los valores predeterminados para las ubicaciones de datos para este proyecto colocando vars de configuración como este en el archivo .env
:
WORKING_DIR=~/Data/Working
ARCHIVE_DATA_DIR=~/Data/Archive
Hay un ejemplo en example.env
.
Los scripts de descarga se proporcionan en data_download. Hay dos opciones para descargar datos.
download_direct.py
( recomendado )download_easydataverse.py
(podría ser lento y podría encontrar errores/problemas; ¡por lo tanto, no recomendado!)config
que contiene los archivos YAML que almacenan la configuración. Cualquier archivo en el conjunto de datos Matching args.filename
se descargará en args.data_folder
. En este trabajo, proporcionamos tres modelos ML diferentes para ser entrenados y evaluados en los conjuntos de datos de referencia, a saber, FNO, U-Net y Pinn. Los códigos para las implementaciones del modelo de referencia están contenidos en los modelos:
train_models_forward.py
es el script principal para entrenar y evaluar el modelo. Hará un script específico del modelo basado en el argumento de entrada.train_models_inverse.py
es el script principal para entrenar y evaluar el modelo de problemas inversos. Hará un script específico del modelo basado en el argumento de entrada.metrics.py
es el script para evaluar los modelos capacitados basados en varias métricas de evaluación descritas en nuestro documento. Además, también traza los datos de predicción y objetivo.analyse_result_forward.py
es el script para convertir el archivo de encurtido guardado del script de cálculo de métricas en el formato PANDAS DataFrame y guardarlo como un archivo CSV. Además, también traza un gráfico de barras para comparar los resultados entre diferentes modelos.analyse_result_inverse.py
es el script para convertir el archivo de encurtido guardado del script de cálculo de métricas en el formato PANDAS DataFrame y guardarlo como un archivo CSV. Este script se usa para los problemas inversos. Además, también traza un gráfico de barras para comparar los resultados entre diferentes modelos.fno
contiene los scripts de implementación de FNO. Estos están en parte adaptados del repositorio FNO.unet
contiene los scripts de implementación de U-Net. Estos están en parte adaptados del repositorio de N-Net.pinn
contiene los scripts de implementación de PinN. Estos utilizan la biblioteca Deepxde.inverse
contiene el modelo para el modelo inverso basado en el gradiente.config
contiene los archivos YAML para la entrada de capacitación del modelo. Las plantillas predeterminadas para diferentes ecuaciones se proporcionan en el directorio Args. El usuario solo necesita copiarlos y pegarlos a la palabra clave Args en el archivo config.yaml.Se puede encontrar un ejemplo para ejecutar el entrenamiento del modelo de avance en Run_Forward_1D.Sh, y un ejemplo para ejecutar el entrenamiento del modelo inverso se puede encontrar en run_inverse.sh.
Proporcionamos los conjuntos de datos de referencia que utilizamos en el documento a través de nuestro repositorio de datos Darus. La configuración de generación de datos se puede encontrar en el documento. Además, los modelos previos a la aparición también están disponibles para ser descargados de los modelos PDEBIGH Pretrados en el repositorio Darus. Para usar los modelos previos a la petróleo, los usuarios pueden especificar el argumento continue_training: True
en el archivo de configuración.
A continuación se muestra una ilustración de la estructura del directorio 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
Cite los siguientes documentos si usa conjuntos de datos PDEBIGH y/o código fuente en su investigación.
@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 con licencia, excepto donde se indique lo contrario. Consulte el archivo LICENSE.txt
.