ที่เก็บรหัสสำหรับ Neurips 2022 Paper Pdebench: มาตรฐานที่กว้างขวางสำหรับการเรียนรู้ด้วยเครื่องวิทยาศาสตร์
- Simtech Best Paper Award 2023 ?
PDEBENCH จัดทำชุดมาตรฐานที่หลากหลายและครอบคลุมสำหรับการเรียนรู้ด้วยเครื่องวิทยาศาสตร์รวมถึงปัญหาทางกายภาพที่ท้าทายและเป็นจริง พื้นที่เก็บข้อมูลนี้ประกอบด้วยรหัสที่ใช้ในการสร้างชุดข้อมูลเพื่ออัปโหลดและดาวน์โหลดชุดข้อมูลจากที่เก็บข้อมูลรวมถึงการฝึกอบรมและประเมินรูปแบบการเรียนรู้ของเครื่องที่แตกต่างกันเป็นพื้นฐาน PDEBENCH มี PDE ที่กว้างกว่าเกณฑ์มาตรฐานที่มีอยู่มากและรวมถึงปัญหาที่เป็นจริงและยาก (ทั้งไปข้างหน้าและผกผัน) ชุดข้อมูลพร้อมใช้งานขนาดใหญ่ซึ่งประกอบด้วยเงื่อนไขเริ่มต้นและขอบเขตที่หลากหลายและพารามิเตอร์ PDE ยิ่งไปกว่านั้น Pdebench ถูกสร้างขึ้นเพื่อให้การขยายซอร์สโค้ดขยายและเราขอเชิญชวนการมีส่วนร่วมอย่างแข็งขันจากชุมชน SCIML เพื่อปรับปรุงและขยายเกณฑ์มาตรฐาน
สร้างและบำรุงรักษาโดย makoto takamoto <[email protected], [email protected]>
, Timothy Praditia <[email protected]>
, Raphael Leiteritz
นอกจากนี้เรายังมีชุดข้อมูลและรูปแบบการเรียนรู้ของเครื่องก่อนหน้า
ชุดข้อมูล PDebench: https://darus.uni-stuttgart.de/dataset.xhtml?persistentid=doi:10.18419/darus-2986
PDEBENCH รุ่นที่ผ่านการฝึกอบรมล่วงหน้า: https://darus.uni-stuttgart.de/dataset.xhtml?persistentid=doi:10.18419/darus-2987
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 ดูรุ่นก่อนหน้า/#linux - cuda 11.7
สำหรับ Jax ซึ่งเร็วกว่า 6 เท่าสำหรับการจำลองมากกว่า pytorch ในการทดสอบของเราดู Jax#pip-installation-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
ตามความพร้อมของฮาร์ดแวร์ของคุณการติดตั้ง pytorch ด้วยการสนับสนุน 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
การพึ่งพาตัวเลือกสำหรับการสร้างข้อมูล:
conda install clawpack jax jaxlib python-dotenv
ในการทดสอบของเราเราใช้ Pytorch เป็นแบ็กเอนด์สำหรับ DeepXde โปรดติดตามเอกสารเพื่อเปิดใช้งานสิ่งนี้
รหัสการสร้างข้อมูลมีอยู่ใน data_gen:
gen_diff_react.py
เพื่อสร้างข้อมูลปฏิกิริยาการแพร่กระจาย 2Dgen_diff_sorp.py
เพื่อสร้างข้อมูลการดูดซับ 1Dgen_radial_dam_break.py
เพื่อสร้างข้อมูลน้ำตื้น 2Dgen_ns_incomp.py
เพื่อสร้างข้อมูล Navier-Stokes ที่ไม่สามารถบีบอัดได้ 2Dplot.py
เพื่อพล็อตข้อมูลที่สร้างขึ้นuploader.py
เพื่ออัปโหลดข้อมูลที่สร้างขึ้นไปยังที่เก็บข้อมูล.env
เป็นข้อมูลสภาพแวดล้อมในการจัดเก็บ URL DataVerse และ Token API เพื่ออัปโหลดข้อมูลที่สร้างขึ้น โปรดทราบว่าชื่อไฟล์ควรเป็นอย่างเคร่งครัด .env
(เช่นลบ example
จากชื่อไฟล์)configs
ประกอบด้วยไฟล์ YAML ที่จัดเก็บการกำหนดค่าสำหรับการจำลอง อาร์กิวเมนต์สำหรับการจำลองเป็นคำอธิบายเฉพาะปัญหาและรายละเอียดสามารถพบได้ในสคริปต์การจำลองsrc
มีสคริปต์การจำลองสำหรับปัญหาที่แตกต่างกัน: sim_diff_react-py
สำหรับการแพร่กระจาย 2D, 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 แต่ละตัว ไฟล์ config สำหรับ Hydra ถูกเก็บไว้ในไดเรกทอรี config
ในไดเรกทอรีของ PDE แต่ละตัว
1D veadment/burgers/reaction-diffusion/2d Darcyflow/สมการ Navier-Stokes ที่บีบอัดได้บันทึกข้อมูลเป็นอาร์เรย์ Numpy ดังนั้นในการอ่านข้อมูลเหล่านั้นผ่าน Dataloaders ของเราควรทำการแปลงข้อมูล/ผสาน สิ่งนี้สามารถทำได้โดยใช้ data_gen_NLE/Data_Merge.py
ซึ่งไฟล์กำหนดค่าอยู่ที่: data_gen/data_gen_NLE/config/config.yaml
หลังจากตั้งค่าพารามิเตอร์อย่างถูกต้องในไฟล์ config (ประเภท: ชื่อของ PDES, DIM: จำนวนมิติเชิงพื้นที่, BD: เงื่อนไขขอบเขต), ไฟล์ HDF5 ที่สอดคล้องกันสามารถรับได้เป็น::
python3 Data_Merge.py
คุณสามารถตั้งค่าค่าเริ่มต้นสำหรับตำแหน่งข้อมูลสำหรับโครงการนี้โดยใส่ config vars เช่นนี้ในไฟล์ .env
:
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 สิ่งเหล่านี้ถูกดัดแปลงบางส่วนจากที่เก็บ FNOunet
มีสคริปต์ของการใช้งาน U-NET สิ่งเหล่านี้ถูกดัดแปลงบางส่วนจากที่เก็บ U-NETpinn
มีสคริปต์ของการใช้งาน PINN สิ่งเหล่านี้ใช้ห้องสมุด DeepXdeinverse
มีโมเดลสำหรับโมเดลผกผันตามการไล่ระดับสีconfig
มีไฟล์ YAML สำหรับอินพุตการฝึกอบรมแบบจำลอง เทมเพลตเริ่มต้นสำหรับสมการที่แตกต่างกันมีอยู่ในไดเรกทอรี ARGS ผู้ใช้เพียงแค่ต้องคัดลอกและวางลงในคำหลักของ ARGS ในไฟล์ config.yamlตัวอย่างในการรันการฝึกอบรมโมเดลไปข้างหน้าสามารถพบได้ใน run_forward_1d.sh และตัวอย่างในการรันการฝึกอบรมแบบจำลองผกผันสามารถพบได้ใน run_inverse.sh
เราจัดเตรียมชุดข้อมูลมาตรฐานที่เราใช้ในกระดาษผ่านที่เก็บข้อมูล DARUS ของเรา การกำหนดค่าการสร้างข้อมูลสามารถพบได้ในกระดาษ นอกจากนี้รุ่นที่ผ่านการฝึกอบรมยังมีให้ดาวน์โหลดจาก Pdebench Pretrained Models Darus Repository ในการใช้โมเดลที่ผ่านการฝึกอบรมผู้ใช้สามารถระบุอาร์กิวเมนต์ 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