Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Hackathon 6th Code Camp No.15] support neuraloperator docs #917

Merged
merged 49 commits into from
Jun 24, 2024

Conversation

Yang-Changhui
Copy link
Contributor

PR types

Others

PR changes

Docs

Describe

add neuraloperator

Yang-Changhui and others added 29 commits April 25, 2024 10:21
Copy link

paddle-bot bot commented May 30, 2024

Thanks for your contribution!

| [sfno 模型]() | 1.01075 | 2.33481 |

## 1. 背景简介
许多科学和工程问题涉及反复求解复杂的偏微分方程 (PDE) 系统,以获取某些参数的不同值。例如分子动力学、微力学和湍流流动。通常这样的系统需要精细的离散化才能捕捉所模拟的现象。因此,传统数值求解器速度慢,有时效率低下。机器学习方法可能通过提供快速的求解器来革新科学领域,这些求解器可以近似或增强传统求解器。然而,经典神经网络在有限维空间之间进行映射,因此只能学习与特定离散化相关的解决方案。这通常是实际应用中的一个限制,因此需要开发与网格无关的神经网络。最近,一项新的工作提出了用神经网络学习无网格、无限维算子。神经算子通过产生一组用于不同离散化、且与网格无关的参数,来弥补有限维算子方法中网格依赖性的问题。 neuraloperator 通过直接在傅里叶空间 (Fourier space) 中参数化 (parameterize) 积分核 (integral kernel) 来制定一个新的神经算子,从而实现了富有表现力和高效的架构。论文对 Burgers 方程、Darcy 流和 Navier-Stokes 方程进行了实验。傅里叶神经算子是第一个基于机器学习的方法,成功地用零样本超分辨率模拟湍流。与传统 PDE 求解器相比,它快达三个数量级。
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

多加了一个空格

Suggested change
许多科学和工程问题涉及反复求解复杂的偏微分方程 (PDE) 系统,以获取某些参数的不同值。例如分子动力学、微力学和湍流流动。通常这样的系统需要精细的离散化才能捕捉所模拟的现象。因此,传统数值求解器速度慢,有时效率低下。机器学习方法可能通过提供快速的求解器来革新科学领域,这些求解器可以近似或增强传统求解器。然而,经典神经网络在有限维空间之间进行映射,因此只能学习与特定离散化相关的解决方案。这通常是实际应用中的一个限制,因此需要开发与网格无关的神经网络。最近,一项新的工作提出了用神经网络学习无网格、无限维算子。神经算子通过产生一组用于不同离散化、且与网格无关的参数,来弥补有限维算子方法中网格依赖性的问题。 neuraloperator 通过直接在傅里叶空间 (Fourier space) 中参数化 (parameterize) 积分核 (integral kernel) 来制定一个新的神经算子,从而实现了富有表现力和高效的架构。论文对 Burgers 方程、Darcy 流和 Navier-Stokes 方程进行了实验。傅里叶神经算子是第一个基于机器学习的方法,成功地用零样本超分辨率模拟湍流。与传统 PDE 求解器相比,它快达三个数量级。
许多科学和工程问题涉及反复求解复杂的偏微分方程 (PDE) 系统,以获取某些参数的不同值。例如分子动力学、微力学和湍流流动。通常这样的系统需要精细的离散化才能捕捉所模拟的现象。因此,传统数值求解器速度慢,有时效率低下。机器学习方法可能通过提供快速的求解器来革新科学领域,这些求解器可以近似或增强传统求解器。然而,经典神经网络在有限维空间之间进行映射,因此只能学习与特定离散化相关的解决方案。这通常是实际应用中的一个限制,因此需要开发与网格无关的神经网络。最近,一项新的工作提出了用神经网络学习无网格、无限维算子。神经算子通过产生一组用于不同离散化、且与网格无关的参数,来弥补有限维算子方法中网格依赖性的问题。 neuraloperator 通过直接在傅里叶空间 (Fourier space) 中参数化 (parameterize) 积分核 (integral kernel) 来制定一个新的神经算子,从而实现了富有表现力和高效的架构。论文对 Burgers 方程、Darcy 流和 Navier-Stokes 方程进行了实验。傅里叶神经算子是第一个基于机器学习的方法,成功地用零样本超分辨率模拟湍流。与传统 PDE 求解器相比,它快达三个数量级。

许多科学和工程问题涉及反复求解复杂的偏微分方程 (PDE) 系统,以获取某些参数的不同值。例如分子动力学、微力学和湍流流动。通常这样的系统需要精细的离散化才能捕捉所模拟的现象。因此,传统数值求解器速度慢,有时效率低下。机器学习方法可能通过提供快速的求解器来革新科学领域,这些求解器可以近似或增强传统求解器。然而,经典神经网络在有限维空间之间进行映射,因此只能学习与特定离散化相关的解决方案。这通常是实际应用中的一个限制,因此需要开发与网格无关的神经网络。最近,一项新的工作提出了用神经网络学习无网格、无限维算子。神经算子通过产生一组用于不同离散化、且与网格无关的参数,来弥补有限维算子方法中网格依赖性的问题。 neuraloperator 通过直接在傅里叶空间 (Fourier space) 中参数化 (parameterize) 积分核 (integral kernel) 来制定一个新的神经算子,从而实现了富有表现力和高效的架构。论文对 Burgers 方程、Darcy 流和 Navier-Stokes 方程进行了实验。傅里叶神经算子是第一个基于机器学习的方法,成功地用零样本超分辨率模拟湍流。与传统 PDE 求解器相比,它快达三个数量级。
## 2. 模型原理
本章节仅对 NeuralOperator 的模型原理进行简单地介绍,详细的理论推导请阅读
[Fourier Neural Operator for Parametric Partial Differential Equations](https://arxiv.org/abs/2010.08895)。
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

这里不要换行


| 模型 | 32x64_l2 | 64x128_l2 |
| :-- | :-- | :-- |
| [sfno 模型]() | 1.01075 | 2.33481 |
模型的总体结构如图所示:

<figure markdown>
![NeuralOperator-arch](https://github.com/PaddlePaddle/PaddleScience/assets/71805205/299b9244-fbb6-4bdd-ab9b-a017034b2ef9){ loading=lazy style="margin:0 auto"}
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

模型预训练阶段是基于随机初始化的网络权重对模型进行训练,如下图所示,其中 $X_[w,h]$ 表示大小为 $w*h$ 的二维偏微分数据,$Y_[w,h]$ 表示预测的大小为 $w*h$ 的二维偏微分方程数值解,$Y_{true[w,h]}$ 表示真实二维偏微分方程数值解。最后网络模型预测的输出和真值计算 LpLoss 或者 H1 损失函数。

<figure markdown>
![FNO-pretraining](https://github.com/PaddlePaddle/PaddleScience/assets/71805205/ae66f124-04cb-4b5d-b45a-c916cc4f22b7){ loading=lazy style="margin:0 auto;height:70%;width:70%"}
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

在推理阶段,给定大小为 $w*h$ 的二维偏微分数据,预测得到大小为 $w*h$ 的二维偏微分方程数值解。

<figure markdown>
![FNO-infer](https://github.com/PaddlePaddle/PaddleScience/assets/71805205/21b67b89-d87a-4dda-a354-91606f73296a){ loading=lazy style="margin:0 auto;height:60%;width:60%"}
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

k(x) 的黑色区域就是可以渗透的地方,白色为不可渗透的区域。右侧是目标结果,颜色越亮,压力越大。

<figure markdown>
![TFNO-predict](https://github.com/PaddlePaddle/PaddleScience/assets/71805205/d0c07ef6-cad3-4db2-8e03-fbd62458f740){ loading=lazy style="margin:0 auto;height:100%;width:100%"}
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

下图展示了 UNO 对 Darcy-flow 数据的预测结果和真值结果。

<figure markdown>
![UNO-predict](https://github.com/PaddlePaddle/PaddleScience/assets/71805205/8088aaf5-3479-4dde-b498-6ce123c10b4f){ loading=lazy style="margin:0 auto;height:100%;width:100%"}
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

下图展示了 SFNO 对 SWE 数据的预测结果和真值结果。

<figure markdown>
![SFNO-predict](https://github.com/PaddlePaddle/PaddleScience/assets/71805205/a80b004a-009f-43e4-bb0f-919e1d9de4e5){ loading=lazy style="margin:0 auto;height:100%;width:100%"}
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

图片也上传了,更新后预览看一下,保证图片大小合适


=== "模型训练命令"

``` sh
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

训练数据集的下载辛苦按照这个格式命令下载。

   # linux
   wget -nc https://paddle-org.bj.bcebos.com/paddlescience/datasets/DeepONet/antiderivative_unaligned_train.npz
   wget -nc https://paddle-org.bj.bcebos.com/paddlescience/datasets/DeepONet/antiderivative_unaligned_test.npz
   # windows
   # curl https://paddle-org.bj.bcebos.com/paddlescience/datasets/deeponet/antiderivative_unaligned_train.npz -o antiderivative_unaligned_train.npz
   # curl https://paddle-org.bj.bcebos.com/paddlescience/datasets/deeponet/antiderivative_unaligned_test.npz -o antiderivative_unaligned_test.npz
   python deeponet.py

python examples/neuraloperator/train_tfno.py mode=eval
# uno 模型评估
python examples/neuraloperator/train_uno.py mode=eval
```
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

模型评估辛苦按照下面的格式下载数据集和模型权重,将模型权重放到EVAL.pretrained_model_path参数下

    # linux
    wget -nc https://paddle-org.bj.bcebos.com/paddlescience/datasets/DeepONet/antiderivative_unaligned_train.npz
    wget -nc https://paddle-org.bj.bcebos.com/paddlescience/datasets/DeepONet/antiderivative_unaligned_test.npz
    # windows
    # curl https://paddle-org.bj.bcebos.com/paddlescience/datasets/deeponet/antiderivative_unaligned_train.npz -o antiderivative_unaligned_train.npz
    # curl https://paddle-org.bj.bcebos.com/paddlescience/datasets/deeponet/antiderivative_unaligned_test.npz -o antiderivative_unaligned_test.npz
    python deeponet.py mode=eval EVAL.pretrained_model_path=https://paddle-org.bj.bcebos.com/paddlescience/models/deeponet/deeponet_pretrained.pdparams

| [sfno 模型](https://paddle-org.bj.bcebos.com/paddlescience/models/neuraloperator/neuraloperator_sfno.pdparams) | 1.01075 | 2.33481 |

## 1. 背景简介
许多科学和工程问题涉及反复求解复杂的偏微分方程 (PDE) 系统,以获取某些参数的不同值。例如分子动力学、微力学和湍流流动。通常这样的系统需要精细的离散化才能捕捉所模拟的现象。因此,传统数值求解器速度慢,有时效率低下。机器学习方法可能通过提供快速的求解器来革新科学领域,这些求解器可以近似或增强传统求解器。然而,经典神经网络在有限维空间之间进行映射,因此只能学习与特定离散化相关的解决方案。这通常是实际应用中的一个限制,因此需要开发与网格无关的神经网络。最近,一项新的工作提出了用神经网络学习无网格、无限维算子。神经算子通过产生一组用于不同离散化、且与网格无关的参数,来弥补有限维算子方法中网格依赖性的问题。 Neuraloperator 通过直接在傅里叶空间 (Fourier space) 中参数化 (parameterize) 积分核 (integral kernel) 来制定一个新的神经算子,从而实现了富有表现力和高效的架构。论文对 Burgers 方程、Darcy 流和 Navier-Stokes 方程进行了实验。傅里叶神经算子是第一个基于机器学习的方法,成功地用零样本超分辨率模拟湍流。与传统 PDE 求解器相比,它快达三个数量级。
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
许多科学和工程问题涉及反复求解复杂的偏微分方程 (PDE) 系统,以获取某些参数的不同值。例如分子动力学、微力学和湍流流动。通常这样的系统需要精细的离散化才能捕捉所模拟的现象。因此,传统数值求解器速度慢,有时效率低下。机器学习方法可能通过提供快速的求解器来革新科学领域,这些求解器可以近似或增强传统求解器。然而,经典神经网络在有限维空间之间进行映射,因此只能学习与特定离散化相关的解决方案。这通常是实际应用中的一个限制,因此需要开发与网格无关的神经网络。最近,一项新的工作提出了用神经网络学习无网格、无限维算子。神经算子通过产生一组用于不同离散化、且与网格无关的参数,来弥补有限维算子方法中网格依赖性的问题。 Neuraloperator 通过直接在傅里叶空间 (Fourier space) 中参数化 (parameterize) 积分核 (integral kernel) 来制定一个新的神经算子,从而实现了富有表现力和高效的架构。论文对 Burgers 方程、Darcy 流和 Navier-Stokes 方程进行了实验。傅里叶神经算子是第一个基于机器学习的方法,成功地用零样本超分辨率模拟湍流。与传统 PDE 求解器相比,它快达三个数量级
许多科学和工程问题,如分子动力学、微力学和湍流流动,都需要反复求解复杂的偏微分方程(PDE)系统,以便获取某些参数的不同值。为了准确捕捉所模拟的现象,这些系统通常需要进行精细的离散化。然而,这也导致了传统数值求解器运行缓慢,有时甚至效率低下。在这种情况下,机器学习方法有望通过提供快速求解器来革新科学领域,这些求解器能够近似或增强传统方法。但值得注意的是,经典神经网络是在有限维空间之间进行映射,因此它们只能学习与特定离散化相关的解决方案,这在实际应用中是一个限制。为了克服这一限制,最近的一项新研究提出了使用神经网络来学习无网格、无限维的算子。这种神经算子通过生成一组用于不同离散化且与网格无关的参数,解决了有限维算子方法中的网格依赖性问题。该研究通过直接在傅里叶空间中参数化积分核,制定了一个新的神经算子,从而创建了一个富有表现力和高效的架构。论文中对 Burgers 方程、Darcy 流和 Navier-Stokes 方程进行了实验验证。值得一提的是,傅里叶神经算子作为首个基于机器学习的方法,成功地以零样本超分辨率模拟了湍流,其速度比传统PDE求解器快达三个数量级


### 2.1 模型训练、推理过程

模型预训练阶段是基于随机初始化的网络权重对模型进行训练,如下图所示,其中 $X_[w,h]$ 表示大小为 $w*h$ 的二维偏微分数据,$Y_[w,h]$ 表示预测的大小为 $w*h$ 的二维偏微分方程数值解,$Y_{true[w,h]}$ 表示真实二维偏微分方程数值解。最后网络模型预测的输出和真值计算 LpLoss 或者 H1 损失函数。
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
模型预训练阶段是基于随机初始化的网络权重对模型进行训练,如下图所示,其中 $X_[w,h]$ 表示大小为 $w*h$ 的二维偏微分数据,$Y_[w,h]$ 表示预测的大小为 $w*h$ 的二维偏微分方程数值解,$Y_{true[w,h]}$ 表示真实二维偏微分方程数值解。最后网络模型预测的输出和真值计算 LpLoss 或者 H1 损失函数。
模型预训练阶段是基于随机初始化的网络权重对模型进行训练,如下图所示,其中 $X_{[w,h]}$ 表示大小为 $w*h$ 的二维偏微分数据,$Y_{[w,h]}$ 表示预测的大小为 $w*h$ 的二维偏微分方程数值解,$Y_{true[w,h]}$ 表示真实二维偏微分方程数值解。最后网络模型预测的输出和真值计算 LpLoss 或者 H1 损失函数。

``` sh
# darcy-flow 数据集下载
# linux
wget -nc https://paddle-org.bj.bcebos.com/paddlescience/datasets/neuraloperator/darcy_flow/darcy_train_16.npy
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

保证用户下载完成数据后能够直接运行代码,按照config配置添加数据保存路径

Suggested change
wget -nc https://paddle-org.bj.bcebos.com/paddlescience/datasets/neuraloperator/darcy_flow/darcy_train_16.npy
wget -nc https://paddle-org.bj.bcebos.com/paddlescience/datasets/neuraloperator/darcy_flow/darcy_train_16.npy -P ./datasets/darcyflow/

# uno 模型训练
python examples/neuraloperator/train_uno.py

# SEVIR 数据集下载
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

SWE 数据集下载

# curl https://paddle-org.bj.bcebos.com/paddlescience/datasets/neuraloperator/darcy_flow/darcy_test_32.npy -o darcy_test_32.npy
# curl https://paddle-org.bj.bcebos.com/paddlescience/datasets/neuraloperator/darcy_flow/darcy_test_16.npy -o darcy_test_16.npy
# tfno 模型训练
python examples/neuraloperator/train_tfno.py
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

默认用户在neuraloperator目录下,因此 python train_tfno.py 即可。其他运行命令也修改下


# SEVIR 数据集下载
# linux
wget -nc https://paddle-org.bj.bcebos.com/paddlescience/datasets/neuraloperator/SWE_data/train_SWE_32x64.npy
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
wget -nc https://paddle-org.bj.bcebos.com/paddlescience/datasets/neuraloperator/SWE_data/train_SWE_32x64.npy
wget -nc https://paddle-org.bj.bcebos.com/paddlescience/datasets/neuraloperator/SWE_data/train_SWE_32x64.npy -P ./datasets/SWE/

# curl https://paddle-org.bj.bcebos.com/paddlescience/datasets/neuraloperator/SWE_data/test_SWE_32x64.npy -o test_SWE_32x64.npy

# sfno 模型训练
python examples/neuraloperator/train_sfno.py
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

sfno模型训练报错,请检查一下。paddle develop版本

Copy link
Contributor Author

@Yang-Changhui Yang-Changhui Jun 20, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

请问报什么错呢,我这边可以正常训练,直接拉取的develop版本的paddlescience版本,paddle develop版本
image

# curl https://paddle-org.bj.bcebos.com/paddlescience/datasets/neuraloperator/darcy_flow/darcy_test_32.npy -o darcy_test_32.npy
# curl https://paddle-org.bj.bcebos.com/paddlescience/datasets/neuraloperator/darcy_flow/darcy_test_16.npy -o darcy_test_16.npy
# tfno 模型评估
python examples/neuraloperator/train_tfno.py mode=eval EVAL.pretrained_model_path=https://paddle-org.bj.bcebos.com/paddlescience/models/neuraloperator/neuraloperator_tfno.pdparams
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

把 examples/neuraloperator/ 去掉吧,其他的命令也类似改下

# uno 模型评估
python train_uno.py mode=eval EVAL.pretrained_model_path=https://paddle-org.bj.bcebos.com/paddlescience/models/neuraloperator/neuraloperator_uno.pdparams

# SEVIR 数据集下载
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

SWE

Copy link
Collaborator

@zhiminzhang0830 zhiminzhang0830 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@zhiminzhang0830 zhiminzhang0830 merged commit 53c4ede into PaddlePaddle:develop Jun 24, 2024
3 of 4 checks passed
huohuohuohuohuo123 pushed a commit to huohuohuohuohuo123/PaddleScience that referenced this pull request Aug 12, 2024
…ddle#917)

* add-neuraloperator

* add-neuraloperator

* add-neuraloperator

* add-neuraloperator

* add-neuraloperator

* add-neuraloperator

* add-neuraloperator

* add-neuraloperator

* add-neuraloperator

* add-neuraloperator

* add-neuraloperator

* add-neuraloperator

* add-neuraloperator-doc

* add-neuraloperator-doc

* move-paddle-harmonics

* add-neuraloperator-doc

* add-neuraloperator-doc

* add-neuraloperator-doc

* add-neuraloperator-doc

* add-neuraloperator-doc

* add-neuraloperator-doc

* add-neuraloperator-docs

* add-neuraloperator-docs

* add-neuraloperator-docs

* add-neuraloperator-doc

* add-neuraloperator-doc
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants