Giter Site home page Giter Site logo

paddlepaddle / paddlescience Goto Github PK

View Code? Open in Web Editor NEW
237.0 19.0 122.0 56.5 MB

PaddleScience is SDK and library for developing AI-driven scientific computing applications based on PaddlePaddle.

Home Page: http://paddlescience-docs.rtfd.io/

License: Apache License 2.0

Python 98.23% Shell 1.56% Dockerfile 0.22%
ai4science deep-learning machine-learning paddlepaddle self-supervised-learning supervised-learning

paddlescience's Introduction

PaddleScience

Developed with PaddlePaddle

Version Python Version Doc Code Style Hydra License

PaddleScience使用文档

👀简介

PaddleScience 是一个基于深度学习框架 PaddlePaddle 开发的科学计算套件,利用深度神经网络的学习能力和 PaddlePaddle 框架的自动(高阶)微分机制,解决物理、化学、气象等领域的问题。支持物理机理驱动、数据驱动、数理融合三种求解方式,并提供了基础 API 和详尽文档供用户使用与二次开发。

📝案例列表

数学(AI for Math)

问题类型 案例名称 优化算法 模型类型 训练方式 数据集 参考资料
微分方程 拉普拉斯方程 机理驱动 MLP 无监督学习 - -
微分方程 伯格斯方程 机理驱动 MLP 无监督学习 Data Paper
微分方程 非线性偏微分方程 机理驱动 PIRBN 无监督学习 - Paper
微分方程 洛伦兹方程 数据驱动 Transformer-Physx 监督学习 Data Paper
微分方程 若斯叻方程 数据驱动 Transformer-Physx 监督学习 Data Paper
算子学习 DeepONet 数据驱动 MLP 监督学习 Data Paper
微分方程 梯度增强的物理知识融合 PDE 求解 机理驱动 gPINN 无监督学习 - Paper
积分方程 沃尔泰拉积分方程 机理驱动 MLP 无监督学习 - Project
微分方程 分数阶微分方程 机理驱动 MLP 无监督学习 - -

技术科学(AI for Technology)

问题类型 案例名称 优化算法 模型类型 训练方式 数据集 参考资料
定常不可压流体 2D 定常方腔流 机理驱动 MLP 无监督学习 -
定常不可压流体 2D 达西流 机理驱动 MLP 无监督学习 -
定常不可压流体 2D 管道流 机理驱动 MLP 无监督学习 - Paper
定常不可压流体 3D 血管瘤 机理驱动 MLP 无监督学习 Data Project
定常不可压流体 任意 2D 几何体绕流 数据驱动 DeepCFD 监督学习 - Paper
非定常不可压流体 2D 非定常方腔流 机理驱动 MLP 无监督学习 - -
非定常不可压流体 Re100 2D 圆柱绕流 机理驱动 MLP 半监督学习 Data Paper
非定常不可压流体 Re100~750 2D 圆柱绕流 数据驱动 Transformer-Physx 监督学习 Data Paper
可压缩流体 2D 空气激波 机理驱动 PINN-WE 无监督学习 - Paper
飞行器设计 MeshGraphNets 数据驱动 GNN 监督学习 Data Paper
飞行器设计 火箭发动机真空羽流 数据驱动 CNN 监督学习 Data -
飞行器设计 Deep-Flow-Prediction 数据驱动 TurbNetG 监督学习 Data Paper
通用流场模拟 气动外形设计 数据驱动 AMGNet 监督学习 Data Paper
流固耦合 涡激振动 机理驱动 MLP 半监督学习 Data Paper
多相流 气液两相流 机理驱动 BubbleNet 半监督学习 Data Paper
多相流 twophasePINN 机理驱动 MLP 无监督学习 - Paper
多相流 非高斯渗透率场估计coming soon 机理驱动 cINN 监督学习 - Paper
流场高分辨率重构 2D 湍流流场重构 数据驱动 tempoGAN 监督学习 Train Data
Eval Data
Paper
流场高分辨率重构 2D 湍流流场重构 数据驱动 cycleGAN 监督学习 Train Data
Eval Data
Paper
流场高分辨率重构 基于Voronoi嵌入辅助深度学习的稀疏传感器全局场重建 数据驱动 CNN 监督学习 Data1
Data2
Data3
Paper
流场高分辨率重构 基于扩散的流体超分重构coming soon 数理融合 DDPM 监督学习 - Paper
求解器耦合 CFD-GCN 数据驱动 GCN 监督学习 Data
Mesh
Paper
受力分析 1D 欧拉梁变形 机理驱动 MLP 无监督学习 - -
受力分析 2D 平板变形 机理驱动 MLP 无监督学习 - Paper
受力分析 3D 连接件变形 机理驱动 MLP 无监督学习 Data Tutorial
受力分析 结构震动模拟 机理驱动 PhyLSTM 监督学习 Data Paper
受力分析 2D 弹塑性结构 机理驱动 EPNN 无监督学习 Train Data
Eval Data
Paper
受力分析和逆问题 3D 汽车控制臂变形 机理驱动 MLP 无监督学习 - -
拓扑优化 2D 拓扑优化 数据驱动 TopOptNN 监督学习 Data Paper
热仿真 1D 换热器热仿真 机理驱动 PI-DeepONet 无监督学习 - -
热仿真 2D 热仿真 机理驱动 PINN 无监督学习 - Paper
热仿真 2D 芯片热仿真 机理驱动 PI-DeepONet 无监督学习 - Paper

材料科学(AI for Material)

问题类型 案例名称 优化算法 模型类型 训练方式 数据集 参考资料
材料设计 散射板设计(反问题) 数理融合 数据驱动 监督学习 Train Data
Eval Data
Paper
材料生成 面向对称感知的周期性材料生成coming soon 数据驱动 SyMat 监督学习 - -

地球科学(AI for Earth Science)

问题类型 案例名称 优化算法 模型类型 训练方式 数据集 参考资料
天气预报 FourCastNet 气象预报 数据驱动 FourCastNet 监督学习 ERA5 Paper
天气预报 NowCastNet 气象预报 数据驱动 NowCastNet 监督学习 MRMS Paper
天气预报 GraphCast 气象预报 数据驱动 GraphCastNet 监督学习 - Paper
大气污染物 UNet 污染物扩散 数据驱动 UNet 监督学习 Data -
天气预报 DGMR 气象预报 数据驱动 DGMR 监督学习 UK dataset Paper

🕘最近更新

✨特性

  • 支持简单几何和复杂 STL 几何的采样与布尔运算。
  • 支持包括 Dirichlet、Neumann、Robin 以及自定义边界条件。
  • 支持物理机理驱动、数据驱动、数理融合三种问题求解方式。涵盖流体、结构、气象等领域 20+ 案例。
  • 支持结果可视化输出与日志结构化保存。
  • 完善的 type hints,用户使用和代码贡献全流程文档,经典案例 AI studio 快速体验,降低使用门槛,提高开发效率。
  • 支持基于 sympy 符号计算库的方程表示与联立方程组计算。
  • 更多特性正在开发中...

🚀安装使用

安装 PaddlePaddle

请在 PaddlePaddle 官网按照您的运行环境,安装 develop 版的 PaddlePaddle。

安装完毕之后,运行以下命令,验证 Paddle 是否安装成功。

python -c "import paddle; paddle.utils.run_check()"

如果出现 PaddlePaddle is installed successfully! Let's start deep learning with PaddlePaddle now. 信息,说明您已成功安装,可以继续安装 PaddleScience。

安装 PaddleScience

  1. 基础功能安装

    从以下三种安装方式中,任选一种均可安装。

    • git 源码安装[推荐]

      执行以下命令,从 github 上 clone PaddleScience 源代码,并以 editable 的方式安装 PaddleScience。

      git clone -b develop https://github.com/PaddlePaddle/PaddleScience.git
      # 若 github clone 速度比较慢,可以使用 gitee clone
      # git clone -b develop https://gitee.com/paddlepaddle/PaddleScience.git
      
      cd PaddleScience
      
      # install paddlesci with editable mode
      pip install -e . -i https://pypi.tuna.tsinghua.edu.cn/simple
    • pip 安装

      执行以下命令以 pip 的方式安装最新版本的 PaddleScience。

      pip install -U paddlesci
    • 设置 PYTHONPATH

      如果在您的环境中,上述两种方式都无法正常安装,则可以选择本方式,在终端内将环境变量 PYTHONPATH 临时设置为 PaddleScience绝对路径,如下所示。

      cd PaddleScience
      export PYTHONPATH=$PYTHONPATH:$PWD # for linux
      set PYTHONPATH=%cd% # for windows
      pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple # manually install requirements

      注:上述方式的优点是步骤简单无需安装,缺点是当环境变量生效的终端被关闭后,需要重新执行上述命令设置 PYTHONPATH 才能再次使用 PaddleScience,较为繁琐。

  2. 验证安装

    python -c "import ppsci; ppsci.utils.run_check()"
  3. 开始使用

    import ppsci
    
    # write your code here...

如需基于复杂几何文件(*.stl, *.mesh, *.obj)文件进行训练、测试等流程,请参考完整安装流程:安装与使用

⚡️快速开始

请参考 快速开始

🎈其他领域支持

除 PaddleScience 套件外,Paddle 框架还支持了 DeepXDE 的所有案例,分子动力学套件 DeepMD-kit 部分案例和功能,以及正在适配中的 Modulus。

💬支持与建议

如使用过程中遇到问题或想提出开发建议,欢迎在 Discussion 提出建议,或者在 Issue 页面新建 issue,会有专业的研发人员进行解答。

👫开源共建

PaddleScience 项目欢迎并依赖开发人员和开源社区中的用户,会不定期推出开源活动。

在开源活动中如需使用 PaddleScience 进行开发,可参考 PaddleScience 开发与贡献指南 以提升开发效率和质量。

  • 🎁快乐开源

    旨在鼓励更多的开发者参与到飞桨科学计算社区的开源建设中,帮助社区修复 bug 或贡献 feature,加入开源、共建飞桨。了解编程基本知识的入门用户即可参与,活动进行中: PaddleScience 快乐开源活动表单

  • 🔥第五期黑客松

    面向全球开发者的深度学习领域编程活动,鼓励开发者了解与参与飞桨深度学习开源项目与文心大模型开发实践。活动进行中:【PaddlePaddle Hackathon 5th】开源贡献个人挑战赛

🎯共创计划

PaddleScience 作为一个开源项目,欢迎来各行各业的伙伴携手共建基于飞桨的 AI for Science 领域顶尖开源项目, 打造活跃的前瞻性的 AI for Science 开源社区,建立产学研闭环,推动科研创新与产业赋能。点击了解 飞桨AI for Science共创计划

❤️致谢

🤝合作单位

cooperation

📜开源协议

Apache License 2.0

paddlescience's People

Contributors

1want2sleep avatar asthestarsfalll avatar co63oc avatar drownfish19 avatar duch714 avatar greatv avatar hydrogensulfate avatar levi131 avatar liaoxin2 avatar lijialin03 avatar liu-xiandong avatar liyulingyue avatar lknt avatar mayyoubeprosperous avatar megemini avatar mrcangye avatar nknan avatar ooooo-create avatar plusnew001 avatar rightpeach avatar shjnt avatar smallpoxscattered avatar thisjiang avatar turingg avatar wangguan1995 avatar xiaoguanghu01 avatar xingfeng01 avatar xusuyong avatar yangguohao avatar zhiminzhang0830 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

paddlescience's Issues

2d圆柱绕流算例中用于训练的dataset的疑问

datasets中的各个csv文件分别代表什么呢?
domain_cylinder.csv,domain_inlet.csv,domain_outlet.csv分别包含了圆柱上,入口,出口的网格和初始时刻数据,domain_train.csv包含整个流场的初始时刻.这样理解对吗?
在initial文件夹中的csv,又是哪个时刻的流场数据呢,因为我看ic0.1.csv中的速度和压力不是初始时刻的数据。
在probes文件夹中的50个probes文件又是代表的什么.

如果我想自己生成数据,放到脚本中直接来训练,也应该按照这个格式吗

【热身打卡】PaddleScience 热身打卡活动

热身打卡活动简介

在 PaddleScience 套件二次开发中,安装并运行 PaddleScience 是一个重要环节。本次热身打卡活动,要求参与者通过 github 拉取 PaddlePaddle/PaddleScience 仓库代码,并参考 安装与使用 完成 PaddleScience 安装、验证,并跑通 ViV 案例,截图跑通成功后的界面,参考如下格式向 [email protected] 发送邮件,打卡成功后即可获得精美的飞桨周边礼品!

注:本次热身打卡活动对硬件没有要求!CPU/GPU 均可,赶快行动起来吧~也可 申请AI Studio开发资源

热身打卡流程

1. 安装与使用

参考 https://paddlescience-docs.readthedocs.io/zh/latest/zh/install_setup/

2. 运行 ViV 案例

运行 viv 案例命令如下:

cd examples/fsi/
python viv.py

注意:如果安装了 CPU 版的 PaddlePaddle,请在运行之前在 viv.py 中按照下图添加 device="cpu" 参数,否则可能会报错
image

3. 发送运行成功邮件

邮件格式
标题: [PaddleScience 热身打卡]
内容:
飞桨团队你好,
【GitHub ID】:XXX
【打卡内容】:安装 PaddleScience & 运行 ViV 案例
【打卡截图】:运行成功的截图.jpg

比如:

内容 结果
硬件 image image
安装方式 参考 https://paddlescience-docs.readthedocs.io/zh/latest/zh/install_setup/
PaddlePaddle版本号 命令:python -c "import paddle; paddle.version.show()" image
PaddleScience 验证安装结果 命令:python -c "import ppsci; ppsci.utils.run_check()" image
PaddleScience 跑通 ViV 案例结果 不需要完整跑完,能跑完前 1000 个 step 即可 image
PaddleScience ViV 可视化结果 图片在 examples/fsi/output_viv/visual/epoch_1000/viv_pred.png 路径下 image

关于后处理的问题

请提出你的问题 Please ask your question

1.想对loss做可视化,如何将train.log中的loss提取出来;
2.PINN预测的流场是以离散的点来排列的,paraview中可视化效果如下:
image
如何获得连续的流场,如文档中一样。

例子中的ldc2d训练时报None

飞桨develop版本,使用这条命令安装的:
!python -m pip install paddlepaddle-gpu==0.0.0.post101 -f https://www.paddlepaddle.org.cn/whl/linux/gpu/develop.html -q

为了方便,把例子的文件都调到PaddleScience根目录了。

python3.7 ldc2d.py

训练到第14步就开始报None了

epoch/num_epoch: 11 / 30000 batch/num_batch: 1 / 1 loss: 5.3213344 eq_loss: 5.321335 bc_loss: 5.810151 epoch/num_epoch: 12 / 30000 batch/num_batch: 1 / 1 loss: 2.547808 eq_loss: 2.547808 bc_loss: 1.0792037 epoch/num_epoch: 13 / 30000 batch/num_batch: 1 / 1 loss: 0.30164686 eq_loss: 0.30164686 bc_loss: 3.5897355 epoch/num_epoch: 14 / 30000 batch/num_batch: 1 / 1 loss: nan eq_loss: nan bc_loss: nan epoch/num_epoch: 15 / 30000 batch/num_batch: 1 / 1 loss: nan eq_loss: nan bc_loss: nan

其它两个例子都ok的。

【快乐开源】完善PaddleScience对符号计算(symbolic computation)功能的支持

This project will be mentored by @HydrogenSulfate

背景

符号计算又称计算机代数计算,通俗地说就是用计算机推导数学公式,如对表达式进行因式分解、化简、微分、积分、解代数方程、求解常微分方程等。PaddleScience 目前的方程计算路径主要通过用户传递 Equation 下子类内置的 python function,或者手写的 python function,这种方式虽然给用户带来了较高的方程构造自由度,但损失了简便性和可读性,用户需要手写完整的 python 代码,从接受输入,到计算所有的中间变量,最后返回计算结果。下面通过一个简单的例子来说明符号计算和手写 python 代码的区别,假设我们需要计算如下一条比较复杂的表达式:

$$ navier_{x} = \rho(\dfrac{\partial^2 u}{\partial t^2}) - (\lambda + \mu)(\dfrac{\partial^2 u}{\partial x^2}+\dfrac{\partial^2 v}{\partial y \partial x} + \dfrac{\partial^2 w}{\partial z \partial x}) - \mu(\dfrac{\partial^2 u}{\partial x^2} + \dfrac{\partial^2 u}{\partial y^2} + \dfrac{\partial^2 u}{\partial z^2}) $$

1.1 Python Function

目前 PaddleScience 使用手写 python function,如下所示,可以看到整体流程比较繁琐。会出现无法避免的if-else判断,容易出现不小心写错的情况,可读性差

# step1. 手写 python function
def navier_x_compute_func(out):
    x, y, u, v = (
        out["x"],
        out["y"],
        out["u"],
        out["v"],
    )
    duxvywz = jacobian(u, x) + jacobian(v, y)
    duxxuyyuzz = hessian(u, x) + hessian(u, y)
    if self.dim == 3:
        z, w = out["z"], out["w"]
        duxvywz += jacobian(w, z)
        duxxuyyuzz += hessian(u, z)
    navier_x = (
        -(self.lambda_ + self.mu) * jacobian(duxvywz, x) - self.mu * duxxuyyuzz
    )
    if self.time:
        t = out["t"]
        navier_x += rho * hessian(u, t)
    return navier_x
    
# step2. 传入必要的数据,计算方程结果
out = {....}
navier_x_value = navier_x_compute_func(out)

1.2 Sympy 符号计算

在使用符号计算的情况下,结构更加清晰,可读性大大增强,并且支持公式打印,不容易写错

# step1. 定义 navier_x 的符号化公式
navier_x = (
    rho * ((u.diff(t)).diff(t))
    - (lambda_ + mu) * (u.diff(x) + v.diff(y) + w.diff(z)).diff(x)
    - mu * ((u.diff(x)).diff(x) + (u.diff(y)).diff(y) + (u.diff(z)).diff(z))
)
# 将符号计算公式转换成 function,这一步由代码内部完成,不需要用户转换
navier_x_compute_func = symbolic_to_function(navier_x)

# step2. 传入必要的数据,计算方程结果
out = {....}
navier_x_value = navier_x_compute_func(out)

使用符号计算,除了上述优点,还有以下优势:

  1. 借助第三方库 latex2sympy,可直接将 latex 代码转换成 sympy 表达式,降低用户使用 sympy 的门槛
  2. sympy 公式也可以转换成 latex 代码,如下所示
    image
  3. sympy 公式可以在 notebook 中可视化,在终端以 Unicode 可视化,如下所示
    image
    image

2. 收益

2.1 开发者个人收益

  • 从 Sympy(github 11.1K star) 入手,了解、熟悉符号计算
  • 了解符号计算和数值计算在计算机中的结合方式,以符号计算指导数值计算的过程

2.2 PaddleScience 收益

  • 提升 Equation 模块的可读性
  • 在支持 python func 的基础上,同时支持 sympy 表达式

3. 开发流程

3.1 安装 PaddleScience

下载安装 PaddleScience 套件:https://paddlescience-docs.readthedocs.io/zh/latest/zh/install_setup/#121-git
注:本任务不涉及复杂几何,因此不需要安装 pymesh、open3d 等安装文档中提及的可选安装包

3.2 代码开发

参考 sympy to func project 设计方案进行开发

3.3 整理代码并提交PR

参考 PaddleScience文档-贡献指南-整理代码并提交

4. 参考资料

奖励

800 京东卡

paddle里LBFGS的使用问题

采用paddle.incubate.optimizer.functional.minimize_lbfgs进行网络训练时,需要提供一个函数func和参数,采用二阶优化方式进行训练的时候,看文档的意思是,损失函数得定义成网络参数的表达式,这怎么实现?

我这里采用闭包定义了一个损失函数,但是训练的时候会报错,请问这个具体该怎么实现?

def train_batch(x, model, loss, weight, optimizer, log_loss, lambda_Re, lambda_Im,):
optimizer.clear_grad()
def clouser():
h = model.feature_transform(x)
w = model(h)
f, t = model.output_transform(x, w)
res = model.pde_(x, h, w, t, f)
opt = model.optim_func(f[:4800], f[:4800])
eqs_loss1 = loss(res[4800:, :1], paddle.zeros_like(res[4800:, :1], dtype='float32'))
eqs_loss2 = loss(res[4800:, 1:], paddle.zeros_like(res[4800:, 1:], dtype='float32'))
lag_loss1 = paddle.mean(res[4800:, :1] * lambda_Re)
lag_loss2 = paddle.mean(res[4800:, 1:] * lambda_Im)
opt_loss = loss(opt, paddle.zeros_like(opt, dtype='float32'))
loss_batch = weight[0] * eqs_loss1 + weight[1] * eqs_loss2 + weight[2] * lag_loss1 + weight[3] * lag_loss2 + weight[4] * opt_loss
log_loss.append([eqs_loss1.item(), eqs_loss2.item(), lag_loss1.item(), lag_loss2.item(), opt_loss.item(),
loss_batch.item()])
return loss_batch
loss_batch =clouser()
loss_batch.backward()
paddle.incubate.optimizer.functional.minimize_lbfgs(clouser, model.parameters())

报错为:
paddle.incubate.optimizer.functional.minimize_lbfgs(clouser, model.parameters()[0][0])
Traceback (most recent call last):
File "C:\ProgramData\Anaconda3\lib\site-packages\IPython\core\interactiveshell.py", line 3444, in run_code
exec(code_obj, self.user_global_ns, self.user_ns)
File "", line 1, in
paddle.incubate.optimizer.functional.minimize_lbfgs(clouser, model.parameters()[0][0])
File "C:\ProgramData\Anaconda3\lib\site-packages\paddle\incubate\optimizer\functional\lbfgs.py", line 110, in minimize_lbfgs
value, g1 = _value_and_gradient(objective_func, xk)
File "C:\ProgramData\Anaconda3\lib\site-packages\paddle\incubate\optimizer\functional\utils.py", line 92, in _value_and_gradient
value = f(x)
TypeError: clouser() takes 0 positional arguments but 1 was given

在pytorch里面采用LBFGS算法可以跑通这个模型,pytorch里的优化器模型定义为:
Optimizer2 = torch.optim.LBFGS(Net_model.parameters(), lr=0.1, max_iter=2)

训练代码为:
def train_batch(inn_var, model, loss, weight, optimizer, log_loss, lambda_Re, lambda_Im,):
def closure():
optimizer.zero_grad()
out_var = model(model.feature_transform(inn_var))
out_var = model.output_transform(inn_var, out_var)
res = model.pde(inn_var, out_var)
opt = model.optim_func(inn_var[:4800], out_var[:4800])、
eqs_loss1 = loss(res[4800:, :1], torch.zeros_like(res[4800:, :1], dtype=torch.float32))
eqs_loss2 = loss(res[4800:, 1:], torch.zeros_like(res[4800:, 1:], dtype=torch.float32))
lag_loss1 = torch.mean(res[4800:, :1] * lambda_Re)
lag_loss2 = torch.mean(res[4800:, 1:] * lambda_Im)
opt_loss = loss(opt, torch.zeros_like(opt, dtype=torch.float32))
loss_batch = weight[0] * eqs_loss1 + weight[1] * eqs_loss2 + weight[2] * lag_loss1 + weight[3] * lag_loss2 +
weight[4] * opt_loss
loss_batch.backward()
log_loss.append([eqs_loss1.item(), eqs_loss2.item(), lag_loss1.item(), lag_loss2.item(), opt_loss.item(),
loss_batch.item()])
return loss_batch
optimizer.step(closure)

loss with weight

请问如果我想探究损失函数内的不同权重对结果的影响,应该如何修改loss呢

【快乐开源】为 PaddleScience 添加 SDF 计算函数

This project will be mentored by @HydrogenSulfate

1. 背景

坐标点是科学计算问题求解时常用的输入数据对象,这些坐标点从指定的几何计算域中采样得到。从训练优化的角度来看,给所有样本点(坐标点)设置一样的权重并不是一个最优的方法,因此在一些优化 trick 中会将每个点的 SDF(signed distance function) 值作为其权重,以此来加强难样本(靠近计算域中心)的权重,减少简单样本(靠近计算域边界)的权重,最终进一步提升模型训练的精度。

PaddleScience 目前的几何模块由简单几何和复杂几何组成,复杂几何由 ppsci.geometry.Mesh 类来表示,并基于 pymesh 库进行 SDF 值的计算;而简单几何(如 ppsci.geometry.Disk)还未具备 SDF 计算功能,因此我们希望给所有的简单几何类,添加 SDF 计算功能。

Tips: SDF 函数一般用于计算一个点(多个点同理)到某一个几何边界的最短(欧式)距离(内部为负,外部为正),而在科学计算套件中,这些计算点通常来自几何内部,因此根据 SDF 的定义,其值往往是负数。如 $[l, r]$ 的一维线段内部一个点 $x$ 的 sdf 函数就是

$$ sdf(x)=-min(x-\rm l,\rm r-x)=-(\dfrac{r-l}{2}-\vert{x-\dfrac{l+r}{2}}\vert) $$

2. 收益 (整体进度:7/7)

使得简单几何具备 SDF 加权功能,从功能上与复杂几何更为统一,提升基于简单几何的案例优化空间,熟悉 PaddleScience 套件

按 merge 的时间顺序,排名不分先后: @Liyulingyue (2), @AndPuQing (2), @jjyaoao (1), @jiamingkong (1) @mrcangye (1)

序号 几何类 认领人 PR号
1 Interval✅(2023/6/20)  @jiamingkong  #403
2 Disk✅(2023/6/17) @jjyaoao    #391
3 Polygon✅(2023/6/27) @mrcangye     #376
4 Rectangle✅(2023/6/17) @AndPuQing  #387
5 Triangle✅(2023/6/17) @AndPuQing  #387
6 Cuboid✅(2023/6/17) @Liyulingyue  #384
7 Sphere✅(2023/6/17) @Liyulingyue  #386

3. 开发流程

3.1 安装 PaddleScience

下载安装 PaddleScience 套件:https://paddlescience-docs.readthedocs.io/zh/latest/zh/install_setup/#121-git

3.2 代码开发

以为 ppsci.geometry.Disk 模块添加 SDF 函数为例

class Disk(geometry.Geometry):
    ...
    ...

    def sdf_func(self, points: np.ndarray) -> np.ndarray:
        """Compute signed distance field.

        Args:
            points (np.ndarray): The coordinate points used to calculate the SDF value,
                the shape is [N, 2]

        Returns:
            np.ndarray: Unsquared SDF values of input points, the shape is [N, 1].

        NOTE: This function usually returns ndarray with negative values, because
        according to the definition of SDF, the SDF value of the coordinate point inside
        the object(interior points) is negative, the outside is positive, and the edge
        is 0. Therefore, when used for weighting, a negative sign is often added before
        the result of this function.
        """
        # 在此处编写代码,为传入的 points,计算对应的 sdf_value 并返回
        return sdf_value

还需修改一下:ppsci/geometry/geometry.py 的代码,

def sample_interior(self, n, random="pseudo", criteria=None, evenly=False):
    """Sample random points in the geometry and return those meet criteria."""
    x = np.empty(shape=(n, self.ndim), dtype=paddle.get_default_dtype())
    _size, _ntry, _nsuc = 0, 0, 0
    while _size < n:
        if evenly:
            points = self.uniform_points(n)
        else:
            if misc.typename(self) == "TimeXGeometry":
                points = self.random_points(n, random, criteria)
            else:
                points = self.random_points(n, random)

        if criteria is not None:
            criteria_mask = criteria(*np.split(points, self.ndim, axis=1)).flatten()
            points = points[criteria_mask]

        if len(points) > n - _size:
            points = points[: n - _size]
        x[_size : _size + len(points)] = points

        _size += len(points)
        _ntry += 1
        if len(points) > 0:
            _nsuc += 1

        if _ntry >= 1000 and _nsuc == 0:
            raise ValueError(
                "Sample interior points failed, "
                "please check correctness of geometry and given creteria."
            )
    # 以下为新增代码:内部点 x 采样完之后计算其 sdf 值,并和 x 一起转换为字典返回
    if hasattr(self, 'sdf_func'):
        sdf = -self.sdf_func(x)
        sdf_dict = misc.convert_to_dict(sdf, ("sdf", ))
        x_dict = misc.convert_to_dict(x, self.dim_keys)
        return {**x_dict, **sdf_dict}
    else:
        return misc.convert_to_dict(x, self.dim_keys)

3.4 SDF 可视化验证

在编写完 SDF 代码之后,我们需要对 SDF 计算结果进行验证,可以按照以下代码手动实例化一个几何对象,然后在其内部进行采样,再调用 sdf_func 对内部采样点计算其 sdf 值,最后用 ppsci 的可视化接口保存为 vtu 文件。用 ParaView 软件打开查看。vtu 文件生成的示例代码如下:

import ppsci
from ppsci.utils import logger
from ppsci import visualize

logger.init_logger()

geo = ppsci.geometry.实现了sdf_func的几何类(...)
points_dict = geo.sample_interior(n=10000) # 可视化10000个点
visualize.vtu.save_vtu_from_dict("./visualize_sdf.vtu", points_dict, geo.dim_keys, ("sdf", ))

3.5 整理代码并提交PR

参考 PaddleScience文档-贡献指南-整理代码并提交

4. 参考资料

【快乐开源】为 PaddleScience 制作镜像

This project will be mentored by @HydrogenSulfate

1. 背景

PaddleScience 套件目前提供了 whl 包安装以及直接 git clone 安装两种形式,但在一些特殊工作环境中(如无法联网),依赖安装过程会比较麻烦,因此希望只做一个基于 ubunutu,具备能直接运行 PaddleScience bracket 案例的镜像供用户使用。

2. 收益

新增 docker 镜像安装方式,免去安装各种依赖包联网安装问题

3. 镜像制作

3.1 制作要求

  • 基于 CUDA 11.6
  • python version = 3.7
  • 含有 develop 版 PaddlePaddle(commit 号指定为 6fde205677a415eae160bcf42420427ed9372f6b)
  • 含有 develop 版 PaddleScience(commit 号指定为 6839369)
  • 在安装了 PaddleScience 基本的依赖包的前提下,安装 pysdf、pymesh、open3d 等 ppsci.geometry.Mesh 模块所需的依赖包

3.2 镜像正确性验证

跑通 bracket.py 案例,能开始训练即通过验证。运行命令如下

git clone https://github.com/PaddlePaddle/PaddleScience.git
cd PaddleScience
git checkout develop
export PYTHONPATH=$PWD:$PYTHONPATH

cd examples/bracket
wget https://paddle-org.bj.bcebos.com/paddlescience/datasets/bracket/bracket_data.tar
tar -xvf bracket_data.tar
python bracket.py

【快乐开源】为 PaddleScience 添加 HamiltonianMonteCarlo API

This project will be mentored by @HydrogenSulfate

1. 背景

概率编程语言 (PPL) 通过将概率与编程语言的表示能力相结合来解决不确定性问题。概率程序是普通确定性计算和代表数据生成过程的随机采样值的混合。将抽象的概率计算转化为随机梯度下降来解决具体优化问题,使概率方法适用于以前难以处理的模型和数据集大小。

2. 收益

2.1 个人收益

  • 了解概率编程的基本原理和使用概率编程的基本**和方法
  • 掌握开源套件的开发流程和方法

2.2 PaddleScience 收益

  • 添加一个 HamiltonianMonteCarlo 概率编程 API 到 ppsci.probability 模块下(目前 ppsci 目录下没有这个 probability 模块,本题目的 API 实现完毕后需要新建该模块即可)

3. 开发流程

3.1 安装 PaddleScience

下载安装 PaddleScience 套件:https://paddlescience-docs.readthedocs.io/zh/latest/zh/install_setup/#121-git

3.2 代码开发

使用现有 PaddlePaddle 框架的 API(PaddlePaddle 概率相关 API 文档)进行实现,并将实现逻辑包装至合适的函数(假设名字为 func),以 ppsci.probability.func 的形式供用户调用(PaddleScience API 文档)。

3.3 整理代码并提交PR

参考 PaddleScience文档-贡献指南-整理代码并提交

4. 参考资料

奖励

500 京东卡

关于例子存盘文件新旧版本不同的情况

大约是去年的版本,存盘文件为rslt_u.vtp ,我从网上找了一段代码,可以本机打开,并旋转查看等。文件头:

发现现在飞桨科学包的新版本,存盘文件为:output-t1-p0.vtu ,文件头 ,。 再用原来那块代码,打开就是空白,看不到东西。

下载了ParaView,上述两种格式都能打开,但是看不到东西,还不如直接用代码打开rslt_u.vtp可以直接看出来。

请教下,存盘文件用ParaView打开后,怎么才能看到呢?

附:
相关项目地址:https://aistudio.baidu.com/aistudio/projectdetail/4278591?contributionType=1
存盘文件是几个例子训练生成的。
打开存盘文件的小代码,在“问题和技巧”部分。

【PaddlePaddle Hackathon 2】72、增加符号化PDE的实现

(此 ISSUE 为 PaddlePaddle Hackathon 第二期活动的任务 ISSUE,更多详见 【PaddlePaddle Hackathon 第二期】任务总览

【任务内容】

  1. 增加符号化PDE的实现
  • 任务难度:困难

【提交内容】

【技术要求】

  • 熟悉 Paddle
  • 熟练掌握 Python

【参考内容】

  1. 不限于Nvidia Modulus符号化的实现方法(sympy库),参考https://developer.nvidia.com/modulus-downloads

【答疑交流】

  • 如果在开发中对于上述任务有任何问题,欢迎在本 ISSUE 下留言交流。
  • 对于开发中的共性问题,在活动过程中,会定期组织答疑,请大家关注官网&QQ群的通知,及时参与

Out of memory error on GPU0

请提出你的问题 Please ask your question

在运行cylinder_2D_steady算例的时候,报错GPU内存不足,以下是完整信息:

W0616 15:50:39.975569  9396 gpu_resources.cc:96] The GPU architecture in your current machine is Pascal, which is not compatible with Paddle installation with arch: 70 75 80 86 , it is recommended to install the corresponding wheel package according to the installation information on the official Paddle website.
W0616 15:50:39.975569  9396 gpu_resources.cc:119] Please NOTE: device: 0, GPU Compute Capability: 6.1, Driver API Version: 12.1, Runtime API Version: 11.7
W0616 15:50:39.978561  9396 gpu_resources.cc:149] device: 0, cuDNN Version: 8.4.
[2023/06/16 15:50:40] ppsci INFO: train_timestamps: [2.0, 2.0, 3.0, 8.0, 11.0, 11.0, 12.0, 15.0, 19.0, 21.0, 21.0, 22.0, 22.0, 23.0, 24.0, 24.0, 24.0, 25.0, 29.0, 30.0, 33.0, 36.0, 38.0, 39.0, 39.0, 40.0, 43.0, 44.0, 44.0, 49.0]
[2023/06/16 15:50:40] ppsci INFO: val_timestamps: [1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 17.0, 18.0, 19.0, 20.0, 21.0, 22.0, 23.0, 24.0, 25.0, 26.0, 27.0, 28.0, 29.0, 30.0, 31.0, 32.0, 33.0, 34.0, 35.0, 36.0, 37.0, 38.0, 39.0, 40.0, 41.0, 42.0, 43.0, 44.0, 45.0, 46.0, 47.0, 48.0, 49.0, 50.0]
[2023/06/16 15:50:41] ppsci INFO: Using paddlepaddle develop(3261b10) on device Place(gpu:0)
[2023/06/16 15:50:41] ppsci INFO: Set to_static=False for forward computation.
Traceback (most recent call last):
  File "E:\AI\AI for science\ppsci_test\examples\cylinder\2d_unsteady\cylinder2d_unsteady_Re100.py", line 231, in <module>
    solver.train()
  File "D:\anaconda3\envs\ppsci\lib\site-packages\ppsci\solver\solver.py", line 377, in train
    self.train_epoch_func(self, epoch_id, self.log_freq)
  File "D:\anaconda3\envs\ppsci\lib\site-packages\ppsci\solver\train.py", line 72, in train_epoch_func
    constraint_losses = solver.forward_helper.train_forward(
  File "D:\anaconda3\envs\ppsci\lib\site-packages\paddle\jit\dy2static\program_translator.py", line 459, in __call__
    return self._call_dygraph_function(*args, **kwargs)
  File "D:\anaconda3\envs\ppsci\lib\site-packages\paddle\jit\dy2static\program_translator.py", line 529, in _call_dygraph_function
    return self.dygraph_function(*args, **kwargs)
  File "D:\anaconda3\envs\ppsci\lib\site-packages\ppsci\utils\expression.py", line 85, in train_forward
    output_dict[name] = expr({**output_dict, **input_dicts[i]})
  File "D:\anaconda3\envs\ppsci\lib\site-packages\ppsci\equation\pde\navier_stokes.py", line 65, in momentum_x_compute_func
    momentum_x += jacobian(u, t)
  File "D:\anaconda3\envs\ppsci\lib\site-packages\ppsci\autodiff\ad.py", line 96, in __call__
    return self.Js[key](i, j)
  File "D:\anaconda3\envs\ppsci\lib\site-packages\ppsci\autodiff\ad.py", line 56, in __call__
    self.J[i] = paddle.grad(y, self.xs, create_graph=True)[0]
  File "D:\anaconda3\envs\ppsci\lib\site-packages\decorator.py", line 232, in fun
    return caller(func, *(extras + args), **kw)
  File "D:\anaconda3\envs\ppsci\lib\site-packages\paddle\fluid\wrapped_decorator.py", line 25, in __impl__
    return wrapped_func(*args, **kwargs)
  File "D:\anaconda3\envs\ppsci\lib\site-packages\paddle\fluid\framework.py", line 462, in __impl__
    return func(*args, **kwargs)
  File "D:\anaconda3\envs\ppsci\lib\site-packages\paddle\fluid\dygraph\base.py", line 813, in grad
    return core.eager.run_partial_grad(
MemoryError:

--------------------------------------
C++ Traceback (most recent call last):
--------------------------------------
Not support stack backtrace yet.

----------------------
Error Message Summary:
----------------------
ResourceExhaustedError:

Out of memory error on GPU 0. Cannot allocate 53.901855MB memory on GPU 0, 7.999878GB memory has been allocated and available memory is only 0.000000B.

Please check whether there is any other process using GPU 0.
1. If yes, please stop them, or start PaddlePaddle on another GPU.
2. If no, please decrease the batch size of your model.
 (at ..\paddle\fluid\memory\allocation\cuda_allocator.cc:86)

目前试过把residual_validator处的batch_size改小,但不起作用。
能否告诉一下gpu是什么型号的,内存需要多少,这是我的gpu信息:

+---------------------------------------------------------------------------------------+
| NVIDIA-SMI 531.30                 Driver Version: 531.30       CUDA Version: 12.1     |
|-----------------------------------------+----------------------+----------------------+
| GPU  Name                      TCC/WDDM | Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf            Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|                                         |                      |               MIG M. |
|=========================================+======================+======================|
|   0  NVIDIA GeForce GTX 1080       WDDM | 00000000:01:00.0 Off |                  N/A |
| 38%   53C    P0               50W / 180W|      3MiB /  8192MiB |      0%      Default |
|                                         |                      |                  N/A |
+-----------------------------------------+----------------------+----------------------+

+---------------------------------------------------------------------------------------+
| Processes:                                                                            |
|  GPU   GI   CI        PID   Type   Process name                            GPU Memory |
|        ID   ID                                                             Usage      |
|=======================================================================================|
|  No running processes found                                                           |
+---------------------------------------------------------------------------------------+

【快乐开源】基于hydra的案例改造计划

This project will be mentored by @HydrogenSulfate

报名格式参考:【报名】:2、3,多个任务之间需要使用中文顿号分隔,报名多个连续任务可用横线表示,如 2-5
PR 提交格式:在 PR 的标题中以 【hydra No.xxx】 开头,注明任务编号

1. 背景

PaddleScience 现有案例只提供了训练代码,没有显式地给出训练命令,也没有提供预训练模型供用户快速进行推理体验;同时现有案例的超参数与代码文件耦合,在实验管理上并不方便。因此为了提升用户体验,期望在案例文档开头,提供训练命令;另外经过调研,引入了 facebook/hydra 配置管理和解析库,方便实验管理和解析。

1.1 Hydra 是什么

Hydra是漫威漫画旗下的超级反派组织,初次登场于《Strange Tales》第135期。该组织的起源可以追溯到一位名叫蜂巢的异人,因其能力过强而被送往遥远的星球。Hydra的标志为骷髅头与下方的蛇足,口号是“砍掉一个头,再长出两个头取而代之”,与神话中的九头蛇海德拉形象相契合。该组织以其无穷无尽的杂兵和强大的再生能力实现这一口号。在现代,一般是将分支NAZI Hydra作为九头蛇组织的主要代表,但并非正统的Hydra。该组织曾隶属于二战中的纳粹德国,并在纳粹政权倒台后渗透进神盾局中,利用神盾局的旗号制造恐慌混乱,从战争中获得利益。- 来自文心一言

Hydra是一个开源的Python框架,简化了研究和其他复杂应用程序的开发。 关键功能是能够按组合动态创建分层配置,并通过配置文件和命令行覆盖它。 Hydra这个名字来自于它能够运行多个类似的工作 - 很像具有多个头的Hydra

Hydra 是一个基于 YAML 格式配置文件和 Omegaconf 分层配置系统的实验管理工具。

1.2 如何利用 Hydra 如何提升实验效率

  • 利用 hydra 支持配置组合的特性,可以将实验所需配置子集分散到各个 YAML 文件中,然后在启动的时候通过命令行读取特定的配置,来启动特定的实验。实验启动后会按照运行日期建立文件夹并用于保存实验输出内容,避免数据丢失等问题。
  • 利用 hydra 的另一个功能 - multirun,通过命令行设置实验参数列表,即可在 python 启动自动串行的实验

由于 hydra 功能丰富而开发者并不需要完全了解这些功能,因此 PaddleScience 提供了简要的说明:https://paddlescience-docs.readthedocs.io/zh/latest/zh/user_guide/#111。 可参考该文档了解在 PaddleScience 中如何使用 hydra 的基本功能。

2. 收益

了解开源组合配置管理工具 hydra 及其基本语法,提升实验效率。

3. 开发流程

3.1 安装 PaddleScience

下载安装 PaddleScience 套件:https://paddlescience-docs.readthedocs.io/zh/latest/zh/install_setup/#121-git

3.2 参考教程,改造案例代码

  1. 参考 PaddleScience + hydra 的使用教程:https://paddlescience-docs.readthedocs.io/zh/latest/zh/user_guide/#11-yaml-hydra
  2. 改造现有案例代码:将原来的 __main__下面的代码移动至 train(cfg)中,然后将 train 部分的评估/推理代码放至新建的 evaluate(cfg)函数中,最后在__main__中通过 def main(cfg: DictConfig)启动案例代码
  3. 修改对应文档中引用代码块的起始位置和终止位置,并在文档开头添加训练命令(考虑到快乐开源开发者可能没有算力,无需添加对应的预训练模型和推理命令,如需数据集则需要加上下载、解压命令)

整体代码可参考 bracket 案例改造 PR 中的 bracket.pybracket.yamlbracket.md 三个文件:https://github.com/PaddlePaddle/PaddleScience/pull/569/files#diff-66a907ab8353125bfd79670b3892e23360967493faf6fd74c2b8aa9bc99b7b6b。
文档改造效果可以参考 bracket 文档:https://paddlescience-docs.readthedocs.io/zh/latest/zh/examples/bracket/

序号 案例 认领人/状态/PR号
1 examples/volterra_ide.md @enkilee
@HydrogenSulfate #572
2 examples/laplace2d.md @xusuyong #572 #575
@HydrogenSulfate
3 examples/viv.md @dddlli
@GreatV #622
4 examples/aneurysm.md @enkilee #607
5 examples/shock_wave.md @DrRyanHuang #627
6 examples/cylinder2d_unsteady.md @zbt78 #624
7 examples/ldc2d_unsteady.md @lknt #580
8 examples/ldc2d_steady.md @lknt #599
9 examples/darcy2d.md @co63oc #590
10 examples/labelfree_DNN_surrogate.md @co63oc #591
11 examples/hpinns.md @co63oc #582
12 examples/deephpms.md @co63oc #603
13 examples/lorenz.md @co63oc #587 #602
14 examples/rossler.md @co63oc #588 #602
15 examples/deeponet.md @co63oc #589
16 examples/cylinder2d_unsteady_transformer_physx.md @co63oc #602
17 examples/tempoGAN.md @co63oc #592
18 examples/deepcfd.md @MayYouBeProsperous #583
19 examples/phylstm.md @co63oc #579
20 examples/bubble.md @co63oc #581

3.3 整理代码并提交PR

参考 PaddleScience文档-贡献指南-整理代码并提交

4. 参考资料

5. 奖励

  • PaddlePaddle/Paddle#56689 每 3 个月统计一次贡献情况,具体来说就是标签为 HappyOpenSource 的 PR,并依据贡献情况为各位开发者邮寄礼物 🎁,本期活动从 8.11 开启,至 11.11 截止统计。

看板信息

任务方向 任务数量 提交作品 / 任务认领 提交率 完成 完成率
热身赛 20 20 / 20 100.0% 20 100.0%

统计信息

排名不分先后 @HydrogenSulfate (1) @xusuyong (1) @GreatV (1) @enkilee (1) @DrRyanHuang (1) @zbt78 (1) @lknt (2) @co63oc (11) @MayYouBeProsperous (1)

【PaddlePaddle Hackathon 2】73、增加(2D/3D/ND )Geometry

(此 ISSUE 为 PaddlePaddle Hackathon 第二期活动的任务 ISSUE,更多详见 【PaddlePaddle Hackathon 第二期】任务总览

【任务内容】

  • 任务描述:
  1. 增加Circle类型Geometry(2D/3D)

  2. 增加 (2D/3D/ND )Geometry

  • 任务难度:中等

【提交内容】

【技术要求】

  • 熟悉 Paddle
  • 熟练掌握 Python

【参考内容】

  1. 不限Nvidia Modulus 几何方法的实现,参考:https://developer.nvidia.com/modulus-downloads

  2. DeepXDE参考:https://github.com/lululxvi/deepxde/tree/master/deepxde/geometry

报错'paddle.incubate.autograd' has no attribute 'prim_enabled', 有没有poisson 1d 方程训练的demo看一下

import numpy as np
import matplotlib.pyplot as plt

import paddlescience as psci
import paddle
from deepxde.backend import tf


ref_rhs = lambda x: -np.sin(x) - 2 * np.sin(2 * x) - 3 * np.sin(3 * x) - 4 * np.sin(4 * x) - 8 * np.sin(8 * x)
ref_sol = lambda x: x + 1 / 8 * np.sin(8 * x) + 1 / np.sin(1 * x) + 1 / 2 * np.sin(2 * x) + 1 / 3 * np.sin(3 * x) + 1 / 4 * np.sin(4 * x)

geom = psci.geometry.Rectangular(origin = (0.), extent = (np.pi))
geom.add_boundary(name = 'left', criteria = lambda x: x==0.)
geom.add_boundary(name = 'right', criteria = lambda x : x==np.pi)
geom_disc = geom.discretize(npoints = 100, method = 'uniform')

pde = psci.pde.Poisson(dim = 2, rhs = ref_rhs, weight=1.0)
bc_left = psci.bc.Dirichlet(name = 'u', rhs = lambda x: ref_sol)
bc_right = psci.bc.Dirichlet(name = 'u', rhs = lambda x: ref_sol)
pde.add_bc('left', bc_left)
pde.add_bc('right', bc_right)
pde_disc = pde.discretize(geo_disc = geom_disc)

net = psci.network.FCNet(num_ins = 1, num_outs = 1, num_layers = 3, hidden_size = 20, activation = 'tanh')

loss = psci.loss.L2(p=2)
algo = psci.algorithm.PINNs(net = net, loss = loss)
opt = psci.optimizer.Adam(learning_rate = 0.001, parameters = net.parameters())
solver = psci.solver.Solver(pde = pde, algo = algo, opt = opt)
solution = solver.solve(num_epoch = 20000)

提示报错

 Input In [62] in <cell line: 4>
    solver = psci.solver.Solver(pde = pde, algo = algo, opt = opt)

  File D:\Anaconda3\lib\site-packages\paddlescience-1.0.0b0-py3.9.egg\paddlescience\solver\solver.py:109 in __init__
    self.__init_static()

  File D:\Anaconda3\lib\site-packages\paddlescience-1.0.0b0-py3.9.egg\paddlescience\solver\solver.py:375 in __init_static
    if config.prim_enabled() and self.pde.geometry.user is not None:

  File D:\Anaconda3\lib\site-packages\paddlescience-1.0.0b0-py3.9.egg\paddlescience\config.py:93 in prim_enabled
    return paddle.incubate.autograd.prim_enabled()

AttributeError: module 'paddle.incubate.autograd' has no attribute 'prim_enabled'

这个怎么解决? 有没有poisson 1d 方程训练的demo看一下,2d在电脑能训练,1d就挺多地方报错,不知道是哪里的问题,有demo就好了解一点

PaddleScience安装问题

问题描述 Issue Description

image
按照飞桨官网的安装PaddleScience后,在Python控制台中验证安装是否成功,出现以上错误。想请问是什么原因?

版本&环境信息 Version & Environment Information


Paddle version: develop
Paddle With CUDA: N/A

OS: Windows 10
GCC version: N/A
Clang version: N/A
CMake version: N/A
Libc version: N/A
Python version: 3.7.2

GPU:GTX1060
CUDA version: 10.2.89
cuDNN version: 7.6.5
Nvidia driver version: N/A
Nvidia driver List: N/A


【快乐开源】迁移 AMGNet 案例至 PaddleScience

This project will be mentored by @HydrogenSulfate

1. 背景

在 AIStudio 上已经有使用 PaddlePaddle 框架API 复现的项目:AI for Science 共创计划 AMGNET 论文复现,现在希望能将这个项目迁移至 PaddleScience,也就是基于 PaddleScience 的 API 实现该项目,最终合入 PaddleScience 仓库

2. 收益

2.1 个人收益

  • 熟悉图神经网络,并从该项目中了解相关流体力学知识,以及如何将物理公式融入到深度学习方法中
  • 学习 PaddleScience 套件代码,掌握开源套件开发基本知识

2.2 PaddleScience 收益

  • 补充 AMGNET 案例至流体相关案例中,提升案例丰富度

3. 开发流程

3.1 安装 PaddleScience

下载安装 PaddleScience 套件:https://paddlescience-docs.readthedocs.io/zh/latest/zh/install_setup/#121-git

3.2 代码开发

参考 AI for Science 共创计划 AMGNET 论文复现项目,以及 PaddleScience 的开发与复现指南,使用 PaddleScience API(PaddleScience API 文档)等价实现该项目,开发代码风格与已有案例保持一致,训练精度与原论文对齐,并仿照已有文档撰写 AMGNet 的案例文档,最终合入 PaddleScience。

3.3 整理代码并提交PR

参考 PaddleScience文档-贡献指南-整理代码并提交

4. 参考资料

奖励

500 京东卡

Import error,why?

I cannot run the example bacause there is no jacobian, hessian etc. in paddle.autograd

测试高阶微分算子方板算例报错AttributeError: 'TensorShape' object has no attribute 'count'

File "C:/Users/UESTC_SAA/Desktop/High Order/elasticPlate_Rectangular.py", line 298, in
loss_weights=[1, 100, 100, 100, 100, 100, 100, 100, 100])
File "C:\Users\UESTC_SAA\anaconda3\envs\DeepXDE\lib\site-packages\deepxde\utils\internal.py", line 22, in wrapper
result = f(*args, **kwargs)
File "C:\Users\UESTC_SAA\anaconda3\envs\DeepXDE\lib\site-packages\deepxde\model.py", line 131, in compile
self._compile_tensorflow_compat_v1(lr, loss_fn, decay, loss_weights)
File "C:\Users\UESTC_SAA\anaconda3\envs\DeepXDE\lib\site-packages\deepxde\model.py", line 176, in _compile_tensorflow_compat_v1
losses_train = losses(self.data.losses_train)
File "C:\Users\UESTC_SAA\anaconda3\envs\DeepXDE\lib\site-packages\deepxde\model.py", line 163, in losses
self.net.targets, self.net.outputs, loss_fn, self.net.inputs, self
File "C:\Users\UESTC_SAA\anaconda3\envs\DeepXDE\lib\site-packages\deepxde\data\data.py", line 13, in losses_train
return self.losses(targets, outputs, loss_fn, inputs, model, aux=aux)
File "C:\Users\UESTC_SAA\anaconda3\envs\DeepXDE\lib\site-packages\deepxde\data\pde.py", line 127, in losses
f = self.pde(inputs, outputs_pde)
File "C:/Users/UESTC_SAA/Desktop/High Order/elasticPlate_Rectangular.py", line 228, in pde
result = paddle.concat(x=[y, Mx, My, Mxy, Qx, Qy], axis=-1)
File "C:\Users\UESTC_SAA\anaconda3\envs\DeepXDE\lib\site-packages\paddle\tensor\manipulation.py", line 1120, in concat
input = [t for t in input if t.shape.count(0) == 0]
File "C:\Users\UESTC_SAA\anaconda3\envs\DeepXDE\lib\site-packages\paddle\tensor\manipulation.py", line 1120, in
input = [t for t in input if t.shape.count(0) == 0]
AttributeError: 'TensorShape' object has no attribute 'count'

进程已结束,退出代码1

input = x
if in_dygraph_mode():
if isinstance(axis, Variable):
axis = axis.item(0)
if not isinstance(input, Variable):
input = [t for t in input if t.shape.count(0) == 0]
return _C_ops.concat(input, axis)
请问这是什么问题

the example

I run the lid driven cavity flow example, but it solves the steady NS equation? it cannot solve the pressure?

【快乐开源】为 PaddleScience 的 equation 模块添加单元测试

This project will be mentored by @HydrogenSulfate

1. 背景

PaddleScience 套件由 13 个模块构成,每个模块的代码存放在 ppsci/ 下的文件夹中,但这些模块暂时缺少对应的单元测试,虽然目前 PaddleScience 的模块没有存在严重的 BUG,但单元测试仍然是这些模块在细节上的正确性的有力保障,避免隐蔽的 BUG。因此希望在此次快乐开源活动中给核心模块 equation(文件夹是 ppsci/equation)添加单元测试

2. 收益

保障 equation 模块的正确性

3. 添加单元测试

3.1 基本要求 (整体进度:7/7)

单元测试基于 pytest 进行编写与开发,需要对 equation 模块下的各个方程类内部代码的 if-else 分支进行全面测试,覆盖率达到 100%

ppsci/equation/pde 下的 7 个文件(laplace.py 除外,已作为 3.2 单测开发 中的示例)添加单元测试,编写代码时尽量使用 pytest 的 参数化测试特性 以减少重复代码

按 merge 的时间顺序,排名不分先后:@GreatV (1), @ccsuzzh (1), @jiamingkong (1), @enkilee (1), @jjyaoao (1), @ruoyunbai (1), @mrcangye (1)

序号 单测文件 认领人 PR号
1 base.py✅ (2023/6/20) @jiamingkong #397
2 biharmonic.py✅(2023/6/23) @jjyaoao #394
3 linear_elasticity.py✅(2023/7/10) @ruoyunbai #416
4 navier_stokes.py✅(2023/7/10) @mrcangye #414
5 normal_dot_vec.py✅(2023/6/17) @GreatV #388
6 poisson.py✅ (2023/6/19) @enkilee #400
7 viv.py✅ (2023/6/20) @ccsuzzh #401

3.2 单测开发

  1. 在 ppsci 下新建一个 test 目录
  2. 在 test 目录下新建 equation 目录
  3. 在 test/equation 目录下新建与 equation 模块下同名的文件,如新建 test_biharmonic.py(对应 equation/biharmonic.py)
  4. 在新建的 test_xxx.py 文件中用 pytest 单元测试框架编写代码,单元测试代码需满足 3.1 基本要求 的内容
  5. 执行 pytest --cov=./ppsci/equation/pde test/equation/test_xxx.py,生成带有覆盖率报告的单元测试结果,并确认被测试的源代码覆盖率为 100%
  6. 提交 PR 到 PaddleScience

3.3 开发注意事项

由于 equation 模块中使用了诸多 jacobian, hessian 封装好的高阶微分函数,因此在单元测试中,计算标准参考结果时,应该使用 paddle.grad 等价实现 jacobian 和 hessian

4. 参考样例

以为 ppsci/equation/pde/laplace.py 添加单元测试 ppsci/test/equation/test_laplace.py 为例,在PR描述中可以看到 ppsci/equation/pde/laplace.py 的 Coverage 是 100%,满足要求。 参考 PR:#370 (所有流水线包括非required都要通过)

5. 参考资料

【快乐开源】迁移 RegAE 案例至 PaddleScicne

This project will be mentored by @HydrogenSulfate

1. 背景

在 AIStudio 上已经有使用 PaddlePaddle 框架API 复现的项目:RegAE,现在希望能将这个项目迁移至 PaddleScience,也就是基于 PaddleScience 的 API 实现该项目,最终合入 PaddleScience 仓库

2. 收益

2.1 个人收益

  • 同时熟悉 CV 领域的经典模型结构 VAE(变分自编码器),并从该项目中了解相关水文学知识,以及如何将物理公式融入到深度学习方法中
  • 学习 PaddleScience 套件代码,掌握开源套件开发基本知识,
  • 了解开源科学计算框架 julia 的基本使用,以及 Paddle 自定义 python 算子的方法

2.2 PaddleScience 收益

  • 补充 VAE 结构至 Arch 模块
  • 补充 RegAE 案例至流体相关案例中,提升案例丰富度

3. 开发流程

3.1 安装 PaddleScience

下载安装 PaddleScience 套件:https://paddlescience-docs.readthedocs.io/zh/latest/zh/install_setup/#121-git

3.2 代码开发

参考 RegAE 项目,以及 PaddleScience 的开发与复现指南,使用 PaddleScience API(PaddleScience API 文档)等价实现该项目,开发代码风格与已有案例保持一致,训练精度与 AIStudio 项目对齐,并仿照已有文档撰写 RegAE 的案例文档,最终合入 PaddleScience。

3.3 整理代码并提交PR

参考 PaddleScience文档-贡献指南-整理代码并提交

4. 参考资料

奖励

500 京东卡

【快乐开源】迁移 CFDGCN 案例至 PaddleScience

This project will be mentored by @HydrogenSulfate

1. 背景

在 AIStudio 上已经有使用 PaddlePaddle 框架API 复现的项目:基于PaddlePaddle的CFDGCN复现 - 飞桨AI Studio,现在希望能将这个项目迁移至 PaddleScience,也就是基于 PaddleScience 的 API 实现该项目,最终合入 PaddleScience 仓库

2. 收益

2.1 个人收益

  • 同时熟悉 CV 领域的经典模型结构 GCN,并从该项目中了解相关流体力学知识,以及如何将物理公式融入到深度学习方法中
  • 学习 PaddleScience 套件代码,掌握开源套件开发基本知识
  • 熟悉 SU2 传统求解器与 Paddle 框架的联动使用
  • 熟悉 MPI 相关知识

2.2 PaddleScience 收益

  • 补充 GCN 结构至 Arch 模块
  • 补充 CFDGCN 案例至流体相关案例中,提升案例丰富度

3. 开发流程

3.1 安装 PaddleScience

下载安装 PaddleScience 套件:https://paddlescience-docs.readthedocs.io/zh/latest/zh/install_setup/#121-git

3.2 代码开发

参考 基于PaddlePaddle的CFDGCN复现 - 飞桨AI Studio项目,以及 PaddleScience 的开发与复现指南,使用 PaddleScience API(PaddleScience API 文档)等价实现该项目,开发代码风格与已有案例保持一致,训练精度与原论文对齐,并仿照已有文档撰写 CFDGCN 的案例文档,最终合入 PaddleScience。

3.3 整理代码并提交PR

参考 PaddleScience文档-贡献指南-整理代码并提交

4. 参考资料

奖励

500 京东卡

部分算子无法计算高阶梯度?

由于需要使用paddle高阶梯度的计算,但是直接采用grad不行,代码如下:

import paddle
from paddle.autograd import jacobian, hessian
from paddle.fluid.dygraph import grad

x = paddle.ones(shape=[1], dtype='float32') * 2 * np.pi
x.stop_gradient = False

y = paddle.sin(x)
dydx = grad(y, x, create_graph=True, retain_graph=True)[0]
print(dydx)
dy2dx2 = grad(dydx, x, create_graph=True, retain_graph=True)[0]
print(dy2dx2)

报错如下:

Traceback (most recent call last):
File "F:\pycharm\Physics-AI\PINN_InverseDesign_paddle\run_paddle_grad.py", line 13, in
dydx = grad(y, x, create_graph=True, retain_graph=True)[0]
File "", line 2, in grad
File "D:\Programs\Anaconda\lib\site-packages\paddle\fluid\wrapped_decorator.py", line 25, in impl
return wrapped_func(*args, **kwargs)
File "D:\Programs\Anaconda\lib\site-packages\paddle\fluid\framework.py", line 434, in impl
return func(*args, **kwargs)
File "D:\Programs\Anaconda\lib\site-packages\paddle\fluid\dygraph\base.py", line 661, in grad
return core.dygraph_partial_grad(
RuntimeError: (NotFound) The Op sin_grad doesn't have any grad op. If you don't intend calculating higher order derivatives, please set create_graph to False.
[Hint: double_grad_node should not be null.] (at ..\paddle\fluid\imperative\partial_grad_engine.cc:923)

提示报错'Poisson' object has no attribute 'bc' 什么意思,怎么解决

from __future__ import absolute_import
from __future__ import division
from __future__ import print_function

import numpy as np
import matplotlib.pyplot as plt

import paddlescience as psci
import paddle
from deepxde.backend import tf

def PINNpde(x, y):
    dy_xx = paddle.incubate.autograd.Hessian(y, x)
    f = 8 * tf.sin(8 * x)
    for i in range(1, 5):
        f += i * tf.sin(i * x)
    return -dy_xx - f


def func(x):
    sol = x + 1 / 8 * np.sin(8 * x)
    for i in range(1, 5):
        sol += 1 / i * np.sin(i * x)
    return sol

geom = psci.geometry.Rectangular(origin = (0.), extent = (np.pi))
geom.add_boundary(name = 'left', criteria = lambda x: x==0.)
geom.add_boundary(name = 'right', criteria = lambda x : x==np.pi)
geom_disc = geom.discretize(npoints = 100, method = 'uniform')

pde = psci.pde.Poisson(dim = 1, rhs = lambda x, y: PINNpde(x, y), weight=1.0)
bc_left = psci.bc.Dirichlet(name = 'u', rhs = lambda x: func(x))
bc_right = psci.bc.Dirichlet(name = 'u', rhs = lambda x: func(x))
pde.add_bc('left', bc_left)
pde.add_bc('right', bc_right)
pde_disc = pde.discretize(geo_disc = geom_disc)

net = psci.network.FCNet(num_ins = 1, num_outs = 1, num_layers = 3, hidden_size = 20, activation = 'tanh')


def output_transform(x, y):
    return x + tf.math.tanh(x) * tf.math.tanh(np.pi - x) * y
net.apply_output_transform(output_transform)

loss = psci.loss.L2(p=2)
algo = psci.algorithm.PINNs(net = net, loss = loss)
opt = psci.optimizer.Adam(learning_rate = 0.001, parameters = net.parameters())
solver =psci.solver.Solver(pde = pde, algo = algo, opt = opt)
solution = solver.solve(num_epoch = 20000)

提示报错 :

Traceback (most recent call last):

  Input In [119] in <cell line: 1>
    pde.add_bc('left', bc_left)

  File D:\Anaconda3\lib\site-packages\paddlescience-1.0.0b0-py3.9.egg\paddlescience\pde\pde_base.py:151 in add_bc
    self.set_bc(name, *args)

  File D:\Anaconda3\lib\site-packages\paddlescience-1.0.0b0-py3.9.egg\paddlescience\pde\pde_base.py:143 in set_bc
    if name not in self.bc:

AttributeError: 'Poisson' object has no attribute 'bc'

想用PINN解poisson 1d equation,提示报错,不太理解这个报错什么意思,怎么解决,后面的

solution = solver.solve(num_epoch = 20000)

也不确定是否能顺利运行。

关于后处理visu_vtk模块的建议

目前在生成vtk数据文件时,会对每类数据(如压力、速度各分量)自动设置字典索引名,目前default为u1,u2,u3,u4,u5.

 def __concatenate_data(outs, nt=None):

    vtkname = ["u1", "u2", "u3", "u4", "u5"]

    data = dict()

    # to numpy
    npouts = list()
    if nt is None:
        nouts = len(outs)
    else:
        nouts = len(outs) - 1

    for i in range(nouts):
        out = outs[i]
        if type(out) != np.ndarray:
            npouts.append(out.numpy())  # tenor to array
        else:
            npouts.append(out)

    # concatenate data
    ndata = outs[0].shape[1]
    data_vtk = list()

    n = 1 if (nt is None) else nt
    for t in range(n):
        for i in range(ndata):
            x = list()
            for out in npouts:
                s = int(len(out) / n) * t
                e = int(len(out) / n) * (t + 1)
                x.append(out[s:e, i])
            data[vtkname[i]] = np.concatenate(x, axis=0)

        data_vtk.append(data)

    return data_vtk

以ldc_2dsteady算例为例,输出的结果包括速度两分量以及压力,在paraview中查看时变量名为u1,u2,u3,非常不方便区分物理量。
image

建议将输出物理量的字典索引作为函数变量或类成员,方便用户直接调用。

【PaddlePaddle Hackathon 2】PaddleScience 任务合集

大家好,非常高兴地告诉大家,第二期 PaddlePaddle Hackathon 开始了。PaddlePaddle Hackathon 是面向全球开发者的深度学习领域编程活动,鼓励开发者了解与参与 PaddlePaddle 开源社区。本次共有四大专区:PaddlePaddle、Paddle Family、Paddle Friends、Paddle Eval,共计100+个任务供大家认领。详细信息可以参考 PaddlePaddle Hackathon 说明。大家是否已经迫不及待了呢~

本 ISSUE 是 Paddle Family 专区 PaddleScience 方向任务合集。具体任务列表如下:

序号 难度 任务 ISSUE
71 ⭐️⭐️ 为 PaddleScience 新增支持随机/Quasi采样法
72 ⭐️⭐️⭐️ 增加符号化PDE的实现
73 ⭐️⭐️ 增加(2D/3D/ND )Geometry
74 ⭐️⭐️ 为 PaddleScience 增加中文文档

若想要认领本次活动任务,请至 PaddlePaddle Hackathon 2 Pinned ISSUE 完成任务 ISSUE 认领。

活动官网:PaddlePaddle Hackathon 2

安装paddlescience报错

问题描述 Issue Description

NFZFIK}69FB%`%9 )3QZU_4

版本&环境信息 Version & Environment Information

PaddlePaddle版本: cpu版0.0.0
系统环境:Ubuntu 20.04.2
Python版本:3.9.17
GPU:A100,CUDA11.6
执行:python -c "import ppsci; ppsci.run_check_mesh()"时报错:
NFZFIK}69FB%`%9 )3QZU_4

【快乐开源】复现 Phy-LSTM 论文

This project will be mentored by @HydrogenSulfate

1. 背景

在 PhyLSTM 论文中,引入了一个创新的物理信息LSTM框架,用于对具有稀缺数据的非线性结构系统进行元建模。基本概念是将可用但不完整的物理知识(例如,物理定律,科学原理)整合到深度长短期记忆(LSTM)网络中,从而限制和促进可行解决方案空间内的学习。将物理先验知识融入到损失函数中,以促使模型在非常有限的可用训练数据集下,也可以准确地捕获潜在的系统非线性。具体到动态结构,考虑运动方程的物理定律、状态依赖性和滞回本构关系来构造物理损耗。嵌入式物理场可以缓解过拟合问题,减少对大型训练数据集的需求,并提高训练模型的鲁棒性,以便通过外推能力进行更可靠的预测。因此,物理引导的深度学习范式优于经典的非物理引导的数据驱动神经网络。

2. 收益

2.1 个人收益

  • 熟悉经典网络模型 LSTM 及其基本原理,以及物理信息驱动与 LSTM 模型结合的方式
  • 掌握开源套件的开发流程和方法

2.2 PaddleScience 收益

  • 补充 LSTM 结构至 Arch 模块
  • 补充 PhyLSTM 案例至相关案例中,提升案例丰富度

3. 开发流程

3.1 安装 PaddleScience

下载安装 PaddleScience 套件:https://paddlescience-docs.readthedocs.io/zh/latest/zh/install_setup/#121-git

3.2 代码开发

参考 Phy-LSTM 源代码,基于 PaddleScience 套件(PaddleScience API 文档)进行复现,在训练精度对齐的前提下,完成复现并撰写对应文档

3.3 整理代码并提交PR

参考 PaddleScience文档-贡献指南-整理代码并提交

4. 参考资料

奖励

500 京东卡

关于定常问题初始流场设置

请提出你的问题 Please ask your question

    你好,当我想对一个定常问题设置初始流场时该怎样做呢?比如说:求解定常的柱内的R-B对流,初始流场温度设置不同,最后得到的流场不同(upflow和downflow)。
    API文档中的初始约束InitialConstraint作用的geom是时空混合的TimeXGeometry,当求解定常问题时可以用这个来作初始约束吗?如果可以,timedomain又该如何设置呢?
    又或者说,PINN无法求解这类定常有初始约束的问题?很抱歉提了这么多问题,我是PINN的初学者,希望能得到回复。

where is volterra

请提出你的问题 Please ask your question

I don't find the module Volterra in ppsci which write in API docs(ppsci.equation.Volterra), this module has been deleted?

关于LBFGS优化器

  1. 目前Paddle中添加了minimize_lbfgs函数,虽然可以实现使用 L-BFGS 方法求解可微函数的最小值,但是在训练中不太好用。个人感觉目前实现的功能只是一个high-level的优化函数,这个函数和scipy的minimize(method=’BFGS’)很像,但要用在训练过程中还比较麻烦。我目前用Paddle和PyTorch实现了一个相同的PINNs网络(地址:https://github.com/X4Science/CNN_DSMC/tree/main/Vlasov-PINN),其中需要用到 L-BFGS优化器,使用Paddle我不太清楚怎么在训练中应用minimize_lbfgs,而PyTorch的比较方便,直接可以这样用
    image
    而我看到minimize_lbfgs这个函数中没有网络参数和学习率这两个变量,所以我感觉如果想做成PyTorch这样是不是还需要进一步封装一下?
  2. 另外,PyTorch中的L-BFGS优化器在我这个问题的应用中也存在一定的问题,PINNs论文原文显示的是这样的loss曲线
    image
    但是我应用后的loss曲线是这样的(使用Adam训练10000步,再用LBFGS训练8000步)
    loss
    L-BFGS训练过程中的loss是跳动的,且最终收敛的loss值还要高于Adam训练的loss值,但最后反演的方程参数精度提高了。

添加Neumann边界条件后报错

根据LDC算例改的管道流动在设定Neumann边界条件时报错

# set bounday condition
weight_down_u = lambda x, y: 1.0 - 10.0 * abs(x)
bc_top_u = psci.bc.Neumann('u')
bc_top_v = psci.bc.Neumann('v')
bc_top_p = psci.bc.Dirichlet('p', rhs=0)
bc_down_u = psci.bc.Dirichlet('u', rhs=0.0)
bc_down_v = psci.bc.Dirichlet('v', rhs=1.0, weight=weight_down_u)
bc_left_u = psci.bc.Dirichlet('u', rhs=0.0)
bc_left_v = psci.bc.Dirichlet('v', rhs=0.0)
bc_right_u = psci.bc.Dirichlet('u', rhs=0.0)
bc_right_v = psci.bc.Dirichlet('v', rhs=0.0)

#add bounday condition
pde.add_bc("top", bc_top_u, bc_top_v, bc_top_p)
pde.add_bc("down", bc_down_u, bc_down_v)
pde.add_bc("left", bc_left_u, bc_left_v)
pde.add_bc("right", bc_right_u, bc_right_v)

Dynamic Graph is Currently in Use.
/usr/lib/python3/dist-packages/apport/report.py:13: DeprecationWarning: the imp module is deprecated in favour of importlib; see the module's documentation for alternative uses
import fnmatch, glob, traceback, errno, sys, atexit, imp, stat
Traceback (most recent call last):
File "/home/dell/PaddleScience/dell-2.4.1/projects/tube(boundary)/ldc2d_steady_train.py", line 116, in
solution = solver.solve(num_epoch=epochs)
File "/home/dell/PaddleScience/dell-2.4.1/projects/tube(boundary)/paddlescience/solver/solver.py", line 123, in solve
return self.__solve_dynamic(num_epoch, bs, checkpoint_freq,
File "/home/dell/PaddleScience/dell-2.4.1/projects/tube(boundary)/paddlescience/solver/solver.py", line 219, in __solve_dynamic
loss, outs, loss_details = self.algo.compute(
File "/home/dell/PaddleScience/dell-2.4.1/projects/tube(boundary)/paddlescience/algorithm/algorithm_pinns.py", line 596, in compute
loss_b, out_b = self.loss.bc_loss(
File "/home/dell/PaddleScience/dell-2.4.1/projects/tube(boundary)/paddlescience/loss/loss_L2.py", line 142, in bc_loss
rst = cmploss.compute_formula(formula, input, input_attr, labels,
File "/home/dell/PaddleScience/dell-2.4.1/projects/tube(boundary)/paddlescience/loss/loss_base.py", line 88, in compute_formula
rst += self.__compute_formula_item(formula, input, input_attr,
File "/home/dell/PaddleScience/dell-2.4.1/projects/tube(boundary)/paddlescience/loss/loss_base.py", line 121, in __compute_formula_item
rst = rst * self.__compute_formula_der(item, input, normal, params)
File "/home/dell/PaddleScience/dell-2.4.1/projects/tube(boundary)/paddlescience/loss/loss_base.py", line 180, in __compute_formula_der
if normal.ndim == 1:
AttributeError: 'NoneType' object has no attribute 'ndim'

【快乐开源】为 PaddleScience 添加 DeepONet 案例

This project will be mentored by @HydrogenSulfate

1. 背景

对于科学计算领域的方程求解问题,基于神经网络拟合任意复杂函数的原理,可以使用模型将方程输入映射到方程的解上从而得到答案。但在 DeepONet 论文中,展示了神经网络实际上具备更强大的能力——拟合任意的非线性连续泛函或非线性运算符,这意味着或许可以训练一次模型求解各种未知方程,而不是为每一个方程分别训练一个“一次性”模型,为此我们希望为 PaddleScience 实现一个 DeepONet 模型并添加对应案例。

2. 开发流程

2.1 代码开发

参考:PaddleScience文档-贡献指南

2.2 案例撰写

阅读 DeepONet 论文和源代码,理解其原理,基于 2.1 的代码完成模型训练,自行构造适量的测试数据,使用训练完毕的模型进行测试并可视化结果,说明复现代码的有效性和正确性。基于 mkdocs 撰写案例文档,和复现代码一起提交 PR 至 PaddleScience(参考案例:https://paddlescience-docs.readthedocs.io/zh/latest/zh/examples/viv/

mkdocs 案例预览步骤:

  1. 安装 mkdocs 依赖:pip install -r docs/requirements.txt
  2. 启动 mkdocs 服务:mkdocs serve -a 127.0.0.1:8686
  3. 点击终端出现的链接,预览并完善撰写的案例文档

3. 参考资料

【PaddlePaddle Hackathon 2】74、为 PaddleScience 增加中文文档

(此 ISSUE 为 PaddlePaddle Hackathon 第二期活动的任务 ISSUE,更多详见 【PaddlePaddle Hackathon 第二期】任务总览

【任务说明】

  • 任务标题:PaddleScience增加中文文档

  • 技术标签:中文文档,PaddleScience

  • 任务难度:中等

  • 详细描述:完善 PaddleScience中文文档,视完成情况分别给予简单、中等、困难难度奖金。

【提交流程】

  • 请将中文文档相关内容提交到 PaddleScience repo 的 docs 目录

【提交内容】

  • 设计文档,并提 PR 至 PaddlePaddle/community 的 rfcs/Science 目录
  • PaddleScience repo 的 docs 目录里相关文件的中文内容

【合入标准】

  • 中文文档语言通顺

  • 中文文档内容完整

【技术要求】

  • 了解 readthedocs 网站

  • 熟悉中文文档撰写

【参考内容】

【答疑交流】

  • 如果在开发中对于上述任务有任何问题,欢迎在本 ISSUE 下留言交流。
  • 对于开发中的共性问题,在活动过程中,会定期组织答疑,请大家关注官网&QQ群的通知,及时参与。

【快乐开源】迁移 DeepCFD 案例至 PaddleScience

This project will be mentored by @HydrogenSulfate

1. 背景

计算流体力学(Computational fluid dynamics, CFD)通过求解Navier-Stokes方程(N-S方程),可以获得流体的各种物理量的分布,如密度、压力和速度等,在微电子系统、土木工程和航空航天等领域应用广泛。然而,在某些复杂的应用场景中,如机翼优化和流体与结构相互作用方面,需要使用千万级甚至上亿的网格对问题进行建模(如下图所示,下图展示了F-18战斗机的全机内外流一体结构化网格模型),导致CFD的计算量非常巨大。因此,目前亟需发展出一种相比于传统CFD方法更高效,且可以保持计算精度的方法。这篇文章的作者提到,可以使用深度学习的方法,通过训练少量传统CFD仿真的数据,构建一种数据驱动(data-driven)的CFD计算模型,来解决上述的问题。

image

在 AIStudio 上已经有使用 PaddlePaddle 框架API 复现的项目:基于PaddlePaddle的DeepCFD复现 - 飞桨AI Studio,现在希望能将这个项目迁移至 PaddleScience,也就是基于 PaddleScience 的 API 实现该项目,最终合入 PaddleScience 仓库

2. 收益

2.1 个人收益

  • 同时熟悉 CV 领域的经典模型结构 U-Net,并从该项目中了解相关流体力学知识,以及如何将物理公式融入到深度学习方法中
  • 学习 PaddleScience 套件代码,掌握开源套件开发基本知识

2.2 PaddleScience 收益

  • 补充 U-Net 结构至 Arch 模块
  • 补充 DeepCFD 案例至流体相关案例中,提升案例丰富度

3. 开发流程

3.1 安装 PaddleScience

下载安装 PaddleScience 套件:https://paddlescience-docs.readthedocs.io/zh/latest/zh/install_setup/#121-git

3.2 代码开发

参考 基于PaddlePaddle的DeepCFD复现 - 飞桨AI Studio项目,以及 PaddleScience 的开发与复现指南,使用 PaddleScience API 文档 等价实现该项目,开发代码风格与已有案例保持一致(如 Darcy 2D),训练精度与原论文对齐,并仿照已有文档撰写 DeepCFD 的案例文档,最终合入 PaddleScience。

3.3 整理代码并提交PR

参考 PaddleScience文档-贡献指南-整理代码并提交

4. 参考资料

奖励

500 京东卡

PIRBN模型复现

需求描述 Feature Description

难度:★★★★☆

1. 背景

物理信息神经网络(PINN)在计算力学方向有越来越多的进展。首先通过神经正切核(NTK)理论研究 PINN 的训练动态。 根据数值实验,Queensland University of Technology LAMSE实验室发现:

  • PINN 在训练期间往往是局部逼近器
  • 对于无法成为局部近似器的 PINN,物理信息损失很难通过训练最小化

受其他研究结果的启发, 该实验室创新性的提出一种新架构:physics-informed radial basis network(PIRBN),它可以:

  • 创新评价指标:直观地展示PINNs收敛的程度
  • 已经证明NTK理论适用于PIRBN。 此外,其他 PINN 技术可以直接迁移到 PIRBN。
  • 创新性使用单层RB神经网络
image

关于单层RB神经网络:

  • radial basis network由Broomhead 和 Lowe提出
  • 使用radial basis function (RBF)作为激活函数
  • 使用单层神经网络

目前,该项目(PIRBN)已经发表于CMAME顶刊

2. 收益

2.1 个人收益

  • 熟悉深度学习的经典模型结构 RBF network
  • 从该项目中了解相关偏微分知识
  • 学习 PaddleScience 套件代码,掌握开源套件开发基本知识
  • 深度理解 PINNs 的机制
  • 熟悉 Paddle 框架使用
  • 熟悉概率与统计相关知识

2.2 PaddleScience 收益

  • 补充 NTK 指标至 metric 模块
  • 补充 PIRBN 案例至PDE相关案例中,提升案例丰富度
  • 补充 RBF network 至 arch 模块

3.开发流程

3.1 安装 PaddleScience

下载安装 PaddleScience 套件:https://paddlescience-docs.readthedocs.io/zh/latest/zh/install_setup/#121-git

3.2 代码开发

参考 PIRBN项目,以及 PaddleScience 的开发与复现指南,使用 PaddleScience API 等价实现该项目,开发代码风格与已有案例保持一致,训练精度与原论文对齐,并仿照已有文档撰写 PIRBN 的案例文档,最终合入 PaddleScience。

4. 参考资料

替代实现 Alternatives

No response

【PaddlePaddle Hackathon 2】71、为 PaddleScience 新增支持随机/Quasi采样法

(此 ISSUE 为 PaddlePaddle Hackathon 第二期活动的任务 ISSUE,更多详见 【PaddlePaddle Hackathon 第二期】任务总览

【任务内容】

  • 传统方法是画网格方法,而PINN方法无需画网格,可以用随机采样法,目前paddlescience需要支持随机/Quasi采样法

  • 任务难度:中等

【提交内容】

【技术要求】

  • 熟悉 Paddle,
  • 熟练掌握 Python,了解numpy等

【参考内容】

  1. [https://github.com/maziarraissi/PINNs/blob/master/main/continuous_time_identification%20(Navier-Stokes)/NavierStokes.py](https://github.com/maziarraissi/PINNs/blob/master/main/continuous_time_identification (Navier-Stokes)/NavierStokes.py)

  2. Nvidia Modulus sample_boundary()/sample_interior()方法的实现,参考:https://developer.nvidia.com/modulus-downloads

  3. DeepXDE

    https://github.com/lululxvi/deepxde/blob/master/deepxde/geometry/timedomain.py

    https://github.com/lululxvi/deepxde/blob/master/deepxde/geometry/sampler.py

【答疑交流】

  • 如果在开发中对于上述任务有任何问题,欢迎在本 ISSUE 下留言交流。
  • 对于开发中的共性问题,在活动过程中,会定期组织答疑,请大家关注官网&QQ群的通知,及时参与

🎁PaddleScience 快乐开源活动表单

问题描述 Please describe your issue

PaddleScience 快乐开源活动

旨在鼓励更多的开发者参与到飞桨科学计算社区的开源建设中,帮助社区修复 bug 或贡献 feature,加入开源、共建飞桨。

热身任务

拉取、安装并运行 PaddleScience 代码

在 PaddleScience 套件二次开发中,安装并运行 PaddleScience 是一个重要环节。本任务邮件通过验收后,即可收到限量版飞桨开源社区定制马克杯,数量有限,先到先得~

mentor:@HydrogenSulfate

参考链接:

命题任务

这里是一些比较明确和具体的任务,这些任务已经经过飞桨社区开发者和飞桨研发的多轮讨论,是可以直接上手去做的任务,任务细节可以在具体 tracking issue 中与 mentor 沟通(你也可以联系邮箱 [email protected] 加微信群沟通)。任务进展见:https://github.com/orgs/PaddlePaddle/projects/7 ,结项任务见 #379 (comment)

任务名称 任务描述 tracking issue mentor 京东卡
为 PaddleScience 案例添加 export 和 inference 功能 补充多个案例的export、inference功能 #788 @HydrogenSulfate @xusuyong -
科学计算 API 文档补全 补充部分 API 的 docstring #686 @HydrogenSulfate -
补充汽车CFD数据集(Shape-Net Car) 补充汽车CFD数据集(Shape-Net Car)至 PaddleScience #666 @wangguan1995 200
补充汽车CFD数据集(Ahmed) 补充汽车CFD数据集(Ahmed)至 PaddleScience #668 @wangguan1995 200

复现PINNs论文

基于PaddleScience复现Raissi, Maziar, Paris Perdikaris, and George E. Karniadakis. Physics-informed neural networks: A deep learning framework for solving forward and inverse problems involving nonlinear partial differential equations. Journal of Computational Physics 378 (2019): 686-707.中所有代码,原始仓库链接为:https://github.com/maziarraissi/PINNs

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.