O repositório de código para o Neurips 2022 Paper Pdebench: uma extensa referência para aprendizado de máquina científico
? SIMTECH MELHOR PAPEL Award 2023 ?
O Pdebench fornece um conjunto diversificado e abrangente de parâmetros de referência para o aprendizado de máquina científico, incluindo problemas físicos desafiadores e realistas. Este repositório consiste no código usado para gerar os conjuntos de dados, para fazer upload e baixar os conjuntos de dados do repositório de dados, bem como treinar e avaliar diferentes modelos de aprendizado de máquina como linhas de base. O PDEBench possui uma gama muito mais ampla de PDEs do que os benchmarks existentes e inclui problemas realistas e difíceis (para a frente e inversa), conjuntos de dados maiores para uso, compreendendo várias condições iniciais e de limite e parâmetros de PDE. Além disso, o PDEbench foi criado para tornar o código -fonte extensível e convidamos a participação ativa da comunidade SCIML para melhorar e estender a referência.
Criado e mantido por makoto takamoto <[email protected], [email protected]>
, timothy praditia <[email protected]>
rianael leiteritz, matackylylylly, freksco, frencesco, frunsco, frencensco, frunsco, frencensco, frunsco, frunsco, frunsco, frencensco, frencensco, frunsco, frunsco, frunsco.
Também fornecemos conjuntos de dados e modelos de aprendizado de máquina pré -terenciados.
Conjuntos de dados pdebench: https://darus.uni-stuttgart.de/dataset.xhtml?persistentid=doi:10.18419/darus-2986
Modelos pré-treinados do Pdebench: https://darus.uni-stuttgart.de/dataset.xhtml?persistentid=doi:10.18419/darus-2987
Dois
Localmente:
pip install --upgrade pip wheel
pip install .
De Pypi:
pip install pdebench
Para incluir dependências para a geração de dados:
pip install " pdebench[datagen310] "
pip install " .[datagen310] " # locally
ou
pip install " pdebench[datagen39] "
pip install " .[datagen39] " # locally
Para suporte à GPU, existem instruções adicionais específicas da plataforma:
Para Pytorch, a versão mais recente que suportamos é v1.13.1, consulte as versões anteriores/#Linux - CUDA 11.7.
Para Jax, que é aproximadamente 6 vezes mais rápido para simulações do que Pytorch em nossos testes, consulte Jax#Pip-Installation-GPU-CUDA-Installed-Via-PIP
Se você gosta, também pode instalar dependências usando o Anaconda, sugerimos usar o Mambaforge como uma distribuição. Caso contrário, você pode precisar ativar o canal do Conde-Forge para os seguintes comandos.
Começando de um novo ambiente:
conda create -n myenv python=3.9
conda activate myenv
Instale dependências para treinamento de modelo:
conda install deepxde hydra-core h5py -c conda-forge
De acordo com a disponibilidade de hardware, instale o Pytorch com suporte 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
Dependências opcionais para geração de dados:
conda install clawpack jax jaxlib python-dotenv
Em nossos testes, usamos o Pytorch como back -end para Deepxde. Siga a documentação para ativar isso.
Os códigos de geração de dados estão contidos em data_gen:
gen_diff_react.py
para gerar os dados de reação de difusão 2D.gen_diff_sorp.py
para gerar os dados de sorpção de difusão 1D.gen_radial_dam_break.py
para gerar os dados de águas rasas 2D.gen_ns_incomp.py
para gerar os dados de Navier-Stokes Incompressíveis 2D.plot.py
para plotar os dados gerados.uploader.py
para fazer upload dos dados gerados para o repositório de dados..env
é os dados do ambiente para armazenar o Token Dataverse URL e API para fazer o upload dos dados gerados. Observe que o nome do arquivo deve ser estritamente .env
(ou seja, remova o example
do nome do arquivo)configs
contém os arquivos YAML que armazenam a configuração da simulação. Os argumentos para a simulação são explicações específicas de problemas e detalhadas podem ser encontradas nos scripts de simulação.src
contém os scripts de simulação para diferentes problemas: sim_diff_react-py
para reação de difusão 2D, sim_diff_sorp.py
para 1D de difusão e swe
para a equação de águas rasas.Os códigos de geração de dados estão contidos em data_gen_nle:
utils.py
FILO Util para geração de dados, principalmente condições de contorno e condições iniciais.
Diretório AdvectionEq
com os códigos de origem para gerar amostras de treinamento de equações de advecção 1D
Diretório BurgersEq
com os códigos de origem para gerar amostras de treinamento de equações de hambúrgueres 1D
Diretório CompressibleFluid
com os códigos de origem para gerar amostras de treinamento de equações de Navier-Stokes compressíveis
ReactionDiffusionEq
Diretório com os códigos de origem para gerar amostras de treinamento de equação de difusão de reação 1D ( Nota: os dados do DARCYFLOW podem ser gerados por run_darcyflow2d.sh nesta pasta. ) save
diretório salvando as amostras de treinamento geradas
Um exemplo típico para gerar amostras de treinamento (equação de advecção 1D): (em data_gen/data_gen_NLE/AdvectionEq/
)
python3 advection_multi_solution_Hydra.py +multi=beta1e0.yaml
que se supõe ser realizado em cada diretório.
Exemplos para gerar outros PDEs são fornecidos em run_trainset.sh
nos diretórios de cada PDE. Os arquivos de configuração do HYDRA são armazenados no diretório config
no diretório de cada PDE.
1D Advecção/Burgers/Reação Difusão/2D Darcyflow/equações compressíveis Navier-Stokes Salve os dados como uma matriz Numpy. Portanto, para ler esses dados por meio de nossos Dataloaders, a transformação/mesclagem de dados deve ser executada. Isso pode ser feito usando data_gen_NLE/Data_Merge.py
cujo arquivo de configuração está localizado em: data_gen/data_gen_NLE/config/config.yaml
. Após definir corretamente os parâmetros no arquivo de configuração (Tipo: Nome de PDEs, Dim: Número de Dimensão Espacial, BD: Condição de Limite), o arquivo HDF5 correspondente pode ser obtido como:
python3 Data_Merge.py
Você pode definir os valores padrão para locais de dados para este projeto, colocando o Config VARS como este no arquivo .env
:
WORKING_DIR=~/Data/Working
ARCHIVE_DATA_DIR=~/Data/Archive
Há um exemplo no example.env
.
Os scripts de download são fornecidos no Data_Download. Existem duas opções para baixar dados.
download_direct.py
( recomendado )download_easydataverse.py
(pode ser lento e você pode encontrar erros/problemas; portanto, não recomendado!)config
que contém os arquivos YAML que armazenam a configuração. Quaisquer arquivos no conjunto de dados correspondentes args.filename
serão baixados no args.data_folder
. Neste trabalho, fornecemos três modelos diferentes de ML a serem treinados e avaliados com os conjuntos de dados de referência, a saber, FNO, U-Net e PINN. Os códigos para as implementações do modelo de linha de base estão contidos nos modelos:
train_models_forward.py
é o principal script para treinar e avaliar o modelo. Ele chamará o script específico do modelo com base no argumento de entrada.train_models_inverse.py
é o principal script para treinar e avaliar o modelo para problemas inversos. Ele chamará o script específico do modelo com base no argumento de entrada.metrics.py
é o script para avaliar os modelos treinados com base em várias métricas de avaliação descritas em nosso artigo. Além disso, também plota os dados de previsão e destino.analyse_result_forward.py
é o script para converter o arquivo de picles salvo do script de cálculo das métricas no formato Pandas Dataframe e salvá -lo como um arquivo CSV. Além disso, ele também plota um gráfico de barras para comparar os resultados entre diferentes modelos.analyse_result_inverse.py
é o script para converter o arquivo de picles salvo do script de cálculo das métricas no formato Pandas Dataframe e salvá -lo como um arquivo CSV. Este script é usado para os problemas inversos. Além disso, ele também plota um gráfico de barras para comparar os resultados entre diferentes modelos.fno
contém os scripts da implementação do FNO. Estes são parcialmente adaptados do repositório FNO.unet
contém os scripts da implementação da rede U. Estes são parcialmente adaptados do repositório de rede U.pinn
contém os scripts da implementação do PINN. Eles utilizam a biblioteca Deepxde.inverse
contém o modelo para modelo inverso com base no gradiente.config
contém os arquivos YAML para a entrada de treinamento do modelo. Os modelos padrão para diferentes equações são fornecidos no diretório ARGS. O usuário só precisa copiá -los e colá -los para a palavra -chave args no arquivo config.yaml.Um exemplo para executar o treinamento do modelo avançado pode ser encontrado em run_forward_1d.sh, e um exemplo para executar o treinamento do modelo inverso pode ser encontrado em run_inverse.sh.
Fornecemos os conjuntos de dados de referência que usamos no artigo através do nosso repositório de dados da DARUS. A configuração de geração de dados pode ser encontrada no artigo. Além disso, os modelos pré -treinados também estão disponíveis para ser baixados do PDEBEnch Models Pretred Models Repositório Darus. Para usar os modelos pré -rastreados, os usuários podem especificar o argumento continue_training: True
no arquivo de configuração.
Abaixo está uma ilustração da estrutura do diretório do 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 os seguintes trabalhos se você usar conjuntos de dados do PDEBEnch e/ou código -fonte em sua pesquisa.
@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},
}
O MIT licenciou, exceto onde declarado de outra forma. Consulte o arquivo LICENSE.txt
.