实践学习PaddleScience飞桨科学工具包

动手实践,在实践中学习!本项目第一次执行会报错,再执行一次即可。若碰到莫名其妙的报错,换成32G显存环境试试。

要平视爱因斯坦和牛顿

爱因斯坦和牛顿也是普通人,也有认识不到的地方,不要盲目崇拜,也不要一味否定前人的实践,而要对前人的成果,尊重客观事实,辩证的一分为二的学习、实践和吸收,要站在牛顿和爱因斯坦的肩膀上,与他们平视。 --张永德(原话记录,有些许异同)

AIStudio和飞桨科学工具包,沟通理论和实践,让我们与顶级科学家站在同一起跑线上!

一、PaddleScience飞桨科学工具包简介

官网github地址:https://github.com/PaddlePaddle/PaddleScience

PaddleScience 使用可重用的软件组件扩展了 PaddlePaddle 框架,用于开发新颖的科学计算应用程序。此类新应用包括基于物理的机器学习、基于神经网络的 PDE 求解器、CFD 机器学习等。PaddleScience 目前正在积极开发中。它的设计不断发展,其 API 可能会发生变化。

1、核心组件

核心功能和组织
PaddleScience 目前专注于 PINNs 模型。核心组件如下。

Geometry几何学,一个用于定义几何域的声明式接口。支持自动离散化

Neural net神经网络,目前支持可自定义大小和深度的全连接层。

PDE偏微分方程,以符号形式描绘偏微分方程。特定 PDE 派生基本 PDE 类。当前包括两个原生 PDE:Laplace2d 和 NavierStokes2d。

Loss损失,定义在训练过程中执行的确切惩罚。默认情况下,应用 L2 损失。在目前的设计中,总损失是方程损失、边界条件损失和初始条件损失三部分的加权和。

Optimizer优化器,指定用于训练的优化器。Adam 是默认选项。未来将提供更多优化器,例如 BFGS。

Solver求解器,以批处理方式管理给定训练数据的训练过程。

Visualization可视化,可轻松访问图形绘制实用程序。

2、物理信息神经网络(PINN)简介

https://blog.csdn.net/jerry_liufeng/article/details/120727393

【PINN】基于物理信息的神经网络 (Physics Informed Neural Network,简称PINN) 是一种科学机器在传统数值领域的应用方法,特别是用于解决与偏微分方程 (PDE) 相关的各种问题,包括方程求解、参数反演、模型发现、控制与优化等。

大多数物理规律都可以表述为偏微分方程(PDE)的形式。偏微分方程,尤其是高阶偏微分方程难以求解析解,通常是采用各种方式逼近从而获得近似解。而神经网络的强大之处就在于其是万能近似器(universal approximator)

PaddlePaddle的神经网络核心是自动微分,其实一个AI框架主要就是完成两部分:1、Tensor张量的存储与计算 2、自动微分。
飞桨的自动微分是通过trace的方式,记录前向OP的执行,并自动创建反向var和添加相应的反向OP,然后来实现反向梯度计算的。

3、Vtk介绍

参见:https://www.cnblogs.com/zhhfan/p/10312170.html

Vtk,(visualization toolkit)是一个开源的免费软件系统,主要用于三维计算机图形学、图像处理和可视化。Vtk是在面向对象原理的基础上设计和实现的,它的内核是用C++构建的,包含有大约250,000行代码,2000多个类,还包含有几个转换界面,因此也可以自由的通过Java,Tcl/Tk和Python各种语言使用vtk。以下介绍VTK对于STL图像的基本操作

基础概念

  • 数据源 resource: cone = vtk.vtkConeSource()
  • 映射器 mapper:coneMapper = vtk.vtkPolyDataMapper()
  • 映射器添加数据源: coneMapper.SetInput( cone.GetOutput() )
  • 演员 actor: coneActor = vtk.vtkActor()
  • 演员添加映射器:coneActor.SetMapper( coneMapper )
  • 绘制器 renderer: vtk.vtkRenderer()
  • 绘制器添加演员:renderer.AddActor( coneActor )
  • 绘制窗口 win:vtk.vtkRenderWindow()
  • 绘制窗口添加绘制器:renWin.AddRenderer( renderer )
  • 窗口读取绘制器生成的图形: renWin.Render()

如何打开vtp文件,见“相关问题和技巧”部分。

二、飞桨科学工具包安装

若只需要执行例子里的.py文件,则只要加上环境变量即可%env PYTHONPATH=/home/aistudio/PaddleScience。见实践三部分。

若需要使用Notebook模式,进行代码分块编写和执行,则需要安装飞桨科学包,本项目里采用手写setup.py安装文件的方式,帮着飞桨科学工具包实现安装功能。见实践一和实践二部分。

1、 环境设置

本项目第一个例子以notebook模式展示,因此需要安装飞桨科学包,步骤会略显繁琐。

安装相关库文件

# 大约需要20秒
!pip install numpy scipy sympy matplotlib vtk pyevtk pandas wget  visualdl

下载飞桨科学工具包源码。

源码中有例子可以用来研究学习。

%cd ~/
# !pip install pip -U --user
!git clone https://github.com/PaddlePaddle/PaddleScience # 下载代码
# 更新软件,可不执行
# !cd ~/PaddleScience/ && git pull

写安装配置文件

因为原配置文件中包含的库较多,在setup安装时会卡住,所以单独写一个只有一个包的配置文件。

命令行运行这步可省略。

%%writefile ~/PaddleScience/requirements_setup.txt
numpy

写飞桨科学包setup.py安装文件

setup安装之后,就可以不局限于执行路径了。

命令行运行这步可省略。

%%writefile ~/PaddleScience/setup.py
import setuptools
import subprocess
import ostry:version = (subprocess.check_output(["git", "describe", "--abbrev=0", "--tags"]).strip().decode("utf-8"))
except Exception as e:print("Could not get version tag. Defaulting to version 0")version = "0"with open("requirements_setup.txt") as f:requirements = f.read().splitlines()if __name__ == "__main__":with open("README.md", "r") as fh:long_description = fh.read()setuptools.setup(name="paddlescience",version=version,author="PaddlePaddle",author_email="xxxx@baidu.com",description="paddlescience",long_description=long_description,long_description_content_type="text/markdown",url=" ",classifiers=["Programming Language :: Python :: 3","Operating System :: POSIX :: Linux","License :: OSI Approved :: MIT License",],packages=setuptools.find_packages(include=["paddlescience*"], exclude=[]),# package_data={"torchmd": ["config.ini", "logging.ini"],},install_requires=requirements,)

2、使用setup安装PaddleScience

使用命令python setup.py install , 其中的setup.py文件就是我们前面写的那个文件。
也可以使用开发模式命令是python setup.py develop

命令行运行这步可省略。

!cd /home/aistudio/PaddleScience/ && python setup.py install

验证

测试一下,看飞桨科学工具包是否安装成功。第一次执行可能报错,重启环境(使setup生效)再次运行即可。

没有error报错则证明安装成功!

命令行运行这步可省略。

# 第一次执行可能报错,重启环境(使setup生效)再次运行即可。
import paddlescience

三、实践1、顶盖驱动型腔流

本指南介绍了如何构建 PINN 模型来模拟 PaddleScience 中的 2d Lid Driven Cavity (LDC) 流动。

1、介绍

LDC 问题模拟了一个充满液体的容器,其中盖子以恒定速度沿水平方向移动。目标是计算系统处于稳态时容器中每个内部点的液体速度。

下图显示了训练 100 x 100 网格生成的结果。分别显示速度的垂直和水平分量。

2、如何构建PINN模型

PINN 模型由过去的传统 PDE 设置和近似解的神经网络共同组成。PDE 部分包括执行物理定律的特定微分方程、限定问题域的几何形状以及可以找到解决方案的初始和边界值条件。神经网络部分可以采用深度学习工具包中广泛存在的典型前馈网络的变体。

要获得 PINN 模型,需要训练神经网络。正是在这个阶段,PDE 的信息通过反向传播被灌输到神经网络中。损失函数在控制如何分配这些信息方面起着至关重要的作用,强调 PDE 的不同方面,例如,通过调整方程残差和边界值的权重。

概念明确后,接下来让我们看一下如何将其转换为 ldc2d 示例。

3、构造几何体psci.geometry

首先,使用模块接口定义问题几何体。在此示例中,几何体是一个矩形,其原点位于坐标 (-0.05, -0.05),范围设置为 (0.05, 0.05)。

# %cd ~/PaddleScience/
import paddlescience as psci
import numpy as npgeo = psci.geometry.Rectangular(origin=(-0.05, -0.05), extent=(0.05, 0.05))

接下来,为几何图形添加边界,这些边界将在 PDE 中使用。请注意,该geo.add_boundary函数仅用于具有物理约束的边界。


geo.add_boundary(name="top", criteria=lambda x, y: abs(y - 0.05) < 1e-5)
geo.add_boundary(name="down", criteria=lambda x, y: abs(y + 0.05) < 1e-5)
geo.add_boundary(name="left", criteria=lambda x, y: abs(x + 0.05) < 1e-5)
geo.add_boundary(name="right", criteria=lambda x, y: abs(x - 0.05) < 1e-5)

准备好域后,给出离散化方法。

npoints = 10201
geo_disc = geo.discretize(npoints=npoints, method="uniform")

4、构建偏微分方程

定义几何部分后,定义要求解的 PDE 方程。在本例中,方程是 2d Navier Stokes。这个方程存在于科学工具包中,只需要创建一个psci.pde.NavierStokes对象来设置方程。

pde = psci.pde.NavierStokes(nu=0.01, rho=1.0, dim=2, time_dependent=False, weight=0.0001)

接下来,为 PDE 添加边界方程。PDE 中的边界方程与几何中的边界定义密切相关。使用pde.add_bc设置边界上的物理信息.

weight_top_u = lambda x, y: 1.0 - 20.0 * abs(x)
bc_top_u = psci.bc.Dirichlet('u', rhs=1.0, weight=weight_top_u)
bc_top_v = psci.bc.Dirichlet('v', rhs=0.0)
bc_down_u = psci.bc.Dirichlet('u', rhs=0.0)
bc_down_v = psci.bc.Dirichlet('v', rhs=0.0)
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)pde.add_bc("top", bc_top_u, bc_top_v)
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)

一旦准备好方程和问题域,就应该给出离散化方法。此方法将用于在训练开始之前生成训练数据。目前,可以将二维空间离散化为 N×M 网格,在本例中具体为 101×101。


pde_disc = pde.discretize(geo_disc=geo_disc)

5、构建神经网络

现在 PDE 部分几乎完成了,我们继续构建神经网络。通过创建psci.network.FCNet对象来定义完全连接的网络很简单。以下是我们如何创建一个由 10 个隐藏层组成的 FFN,每个隐藏层有 20 个神经元,使用双曲正切作为激活函数。

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

接下来,最重要的步骤之一是定义损失函数。这里我们使用 L2 损失。

loss = psci.loss.L2(p=2)

通过设计,该loss对象传达了 PDE 的完整信息。现在结合神经网络和损失,我们创建psci.algorithm.PINNs模型算法。

algo = psci.algorithm.PINNs(net=net, loss=loss)

接下来,通过插入 Adam 优化器,构建求解器,就可以开始训练了。在此示例中,使用了 Adam 优化器,并给出了 0.001 的学习率。

该类将此处psci.solver.Solver调用的 PINNs 模型和优化器捆绑到公开接口 algo的求解器对象中。接受一个关键字参数,指定每个批次的 epoch 数。

# 300epoch 用时40秒。30000估计用时4000秒,约一小时7分钟
opt = psci.optimizer.Adam(learning_rate=0.001, parameters=net.parameters())
solver = psci.solver.Solver(pde=pde_disc, algo=algo, opt=opt)
solution = solver.solve(num_epoch=3000) # 30000

最后,solver.solve返回一个函数,该函数计算几何中给定点的解值。将该函数应用于几何,将输出转换为 Numpy,然后您可以验证结果。
psci.visu.save_vtk是一个快速可视化的辅助工具。它将图形保存在 vtp 文件中,可以使用Paraview播放。

psci.visu.save_vtk(geo_disc=pde_disc.geometry, data=solution)
# psci.visu.save_vtk(
#     time_array=pde_disc.time_array, geo_disc=pde_disc.geometry, data=solution)

##6、 这样顶盖驱动型腔流训练就完成了

期间碰到过从第435个开始None的问题,新飞桨版本已解决该问题。

epoch/num_epoch:  434 / 30000 batch/num_batch:  1 / 1 loss:  66.1305 eq_loss:  66.13051 bc_loss:  8.132067
epoch/num_epoch:  435 / 30000 batch/num_batch:  1 / 1 loss:  nan eq_loss:  nan bc_loss:  nan

四、实践2、多孔介质中的达西流

# %cd ~/PaddleScience
import paddlescience as psci
import numpy as np
import paddle

1、构造几何psci.geometry

首先,使用模块接口定义问题几何。在此示例中,几何图形是一个矩形,其原点位于坐标 (0.0, 0.0),范围设置为 (1.0, 1.0)。

psci.config.set_dtype("float32")# ref solution
ref_sol = lambda x, y: np.sin(2.0 * np.pi * x) * np.cos(2.0 * np.pi * y)# ref rhs
ref_rhs = lambda x, y: 8.0 * np.pi**2 * np.sin(2.0 * np.pi * x) * np.cos(2.0 * np.pi * y)# set geometry and boundary
geo = psci.geometry.Rectangular(origin=(0.0, 0.0), extent=(1.0, 1.0))

接下来,为几何图形添加边界,这些边界将在 PDE 中使用。请注意,该geo.add_boundary函数仅用于具有物理约束的边界。

geo.add_boundary(name="top", criteria=lambda x, y: y == 1.0)
geo.add_boundary(name="down", criteria=lambda x, y: y == 0.0)
geo.add_boundary(name="left", criteria=lambda x, y: x == 0.0)
geo.add_boundary(name="right", criteria=lambda x, y: x == 1.0)

准备好域后,应给出离散化方法。

geo_disc = geo.discretize(npoints=npoints, method="uniform")

2、构建偏微分方程

定义几何部分后,定义要求解的 PDE 方程。在本例中,方程是 2d Poisson。这个方程存在于包中,只需要创建一个psci.pde.Poisson对象来设置方程。

pde = psci.pde.Poisson(dim=2, rhs=ref_rhs)

接下来,为 PDE 添加边界方程。PDE 中的边界方程与几何中的边界定义密切相关。需要设置边界上的物理信息,然后使用pde.add_bc.

bc_top = psci.bc.Dirichlet('u', rhs=ref_sol)
bc_down = psci.bc.Dirichlet('u', rhs=ref_sol)
bc_left = psci.bc.Dirichlet('u', rhs=ref_sol)
bc_right = psci.bc.Dirichlet('u', rhs=ref_sol)pde.add_bc("top", bc_top)
pde.add_bc("down", bc_down)
pde.add_bc("left", bc_left)
pde.add_bc("right", bc_right)

一旦准备好方程和问题域,就应该给出离散化方法。此配方将用于在训练开始之前生成训练数据。

pde_disc = pde.discretize(geo_disc=geo_disc)

3、构建神经网络

现在 PDE 部分几乎完成了,我们继续构建神经网络。通过创建psci.network.FCNet对象来定义完全连接的网络很简单。以下是我们如何使用双曲正切作为激活函数创建一个由 5 个隐藏层组成的 FFN,每个隐藏层有 20 个神经元。

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

接下来,最重要的步骤之一是定义损失函数。这里我们使用 L2 损失。

loss = psci.loss.L2()

通过设计,该loss对象传达了 PDE 的完整信息。现在结合神经网络和损失,我们创建psci.algorithm.PINNs模型算法。

algo = psci.algorithm.PINNs(net=net, loss=loss)

接下来,通过插入 Adam 优化器,构建求解器,您就可以开始训练了。在此示例中,使用了 Adam 优化器,并给出了 0.001 的学习率。

该类将此处psci.solver.Solver调用的 PINNs 模型和优化器捆绑到公开接口 algo的求解器对象中。接受一个关键字参数,num_epoch指定每个批次的 epoch 数。

100epoch用时3秒,10000估计用时300秒。

opt = psci.optimizer.Adam(learning_rate=0.001, parameters=net.parameters())
solver = psci.solver.Solver(pde=pde_disc, algo=algo, opt=opt)
solution = solver.solve(num_epoch=10000)  # 10000

最后,solver.solve返回一个函数,该函数计算几何中给定点的解值。将该函数应用于几何,将输出转换为 Numpy,然后您可以验证结果。

psci.visu.save_vtk是一个快速可视化的辅助工具。它将图形保存在 vtp 文件中,可以使用Paraview播放。

psci.visu.save_vtk(geo_disc=pde_disc.geometry, data=solution)
# MSE
# TODO: solution array to dict: interior, bc
cord = pde_disc.geometry.interior
ref = ref_sol(cord[:, 0], cord[:, 1])
mse2 = np.linalg.norm(solution[0][:, 0] - ref, ord=2)**2n = 1
for cord in pde_disc.geometry.boundary.values():ref = ref_sol(cord[:, 0], cord[:, 1])mse2 += np.linalg.norm(solution[n][:, 0] - ref, ord=2)**2n += 1mse = mse2 / npointsprint("MSE is: ", mse)

五、实践3、拉普拉斯方程

在 PaddleScience 中为简单的拉普拉斯方程构建 PINN 模型。

若只需要训练.py文件,则可以省略上面所有的步骤,只需要完成下面三步即可:

  1. 安装相关软件包
    !pip install numpy scipy sympy matplotlib vtk pyevtk pandas wget visualdl

  2. 设置环境变量
    %env PYTHONPATH=/home/aistudio/PaddleScience

  3. 执行训练程序
    !cd ~/PaddleScience/examples/laplace && python laplace2d.py

# cpu 运行5分钟 新版本gpu下1分40秒。
# !pip install numpy scipy sympy matplotlib vtk pyevtk pandas wget  visualdl
%env  PYTHONPATH=/home/aistudio/PaddleScience
!cd ~/PaddleScience/examples/laplace && python laplace2d.py

输出信息

epoch: 22  loss: 0.084736794  eq loss: 0.00025607698  bc loss: 0.0052932343  ic loss: 0.0  data loss: 0.0
epoch: 23  loss: 0.084736794  eq loss: 0.00025607698  bc loss: 0.0052932343  ic loss: 0.0  data loss: 0.0
epoch: 24  loss: 0.084736794  eq loss: 0.00025607698  bc loss: 0.0052932343  ic loss: 0.0  data loss: 0.0
epoch: 25  loss: 0.084736794  eq loss: 0.00025607698  bc loss: 0.0052932343  ic loss: 0.0  data loss: 0.0
MSE is:  4.461478115287425e-06

六、实践4、3D绕柱

# 3d 绕柱 15分钟1300epoch。 2000个epoch预计23分钟 。
!cd ~/PaddleScience/examples/cylinder/3d_steady/ && python cylinder3d_steady.py
# 顶盖驱动型腔流 gpu 52分钟
# !cd ~/PaddleScience/examples/ldc && python ldc2d_steady.py
# 多孔介质中的达西流 gpu 6分38秒
# !cd ~/PaddleScience/examples/darcy/ && python darcy2d.py

七、问题和技巧

如何打开vtp文件

可以使用paraview打开vtp文件。

这里也提供了一个readvtp.py文件,放在work目录下。可以将这个文件和vtp文件都下载到本地,然后执行python readvtp.py rslt_u.vtp即可打开该文件,是3d的哦,可以用鼠标旋转看看。 本机需要安装vtk库(pip install vtk)。

新版本科学工具包的存盘文件为vtu,不能用下面的小程序打开(打开后看不到东西)。需要安装下载paraview来打开。

%%writefile ~/work/readvtp.py
import vtkmodules.vtkInteractionStyle
# noinspection PyUnresolvedReferences
import vtkmodules.vtkRenderingOpenGL2
from vtkmodules.vtkCommonColor import vtkNamedColors
from vtkmodules.vtkIOXML import vtkXMLPolyDataReader
from vtkmodules.vtkRenderingCore import (vtkActor,vtkPolyDataMapper,vtkRenderWindow,vtkRenderWindowInteractor,vtkRenderer
)def get_program_parameters():import argparsedescription = 'Read a VTK XML PolyData file.'epilogue = ''''''parser = argparse.ArgumentParser(description=description, epilog=epilogue,formatter_class=argparse.RawDescriptionHelpFormatter)parser.add_argument('filename', help='horse.vtp.')args = parser.parse_args()return args.filenamedef main():colors = vtkNamedColors()filename = get_program_parameters()reader = vtkXMLPolyDataReader()reader.SetFileName(filename)reader.Update()mapper = vtkPolyDataMapper()mapper.SetInputConnection(reader.GetOutputPort())actor = vtkActor()actor.SetMapper(mapper)actor.GetProperty().SetColor(colors.GetColor3d('Tan'))# Create a rendering window and rendererren = vtkRenderer()renWin = vtkRenderWindow()renWin.AddRenderer(ren)renWin.SetWindowName('ReadVTP')# Create a renderwindowinteractoriren = vtkRenderWindowInteractor()iren.SetRenderWindow(renWin)# Assign actor to the rendererren.AddActor(actor)# Enable user interface interactoriren.Initialize()renWin.Render()ren.SetBackground(colors.GetColor3d('AliceBlue'))ren.GetActiveCamera().SetPosition(-0.5, 0.1, 0.0)ren.GetActiveCamera().SetViewUp(0.1, 0.0, 1.0)renWin.Render()iren.Start()if __name__ == '__main__':main()

八、调试纠错

报错cannot import name ‘jacobian’

import paddlescienc报错:15 import paddle16 import paddle.nn.functional as F
---> 17 from paddle.autograd import jacobian, hessian, batch_jacobian, batch_hessian18 from ..pde import first_order_rslts, first_order_derivatives, second_order_derivatives19 from .loss_base import LossBase
ImportError: cannot import name 'jacobian' from 'paddle.autograd' (/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/paddle/autograd/__init__.py)

估计应该用最新版本才可以!
安装最新develop版本,问题解决!

没有版本ModuleNotFoundError: No module named ‘paddlescience’

要在科学工具包的根目录执行 ,把文件直接放在科学工具包根目录然后执行。

后期是采用setup安装科学工具包的方式来解决路径依赖问题。

OSError: (External) CUBLAS error(7)

OSError: (External) CUBLAS error(7). [Hint: 'CUBLAS_STATUS_INVALID_VALUE'.  An unsupported value or parameter was passed to the function (a negative vector size, for example). To correct: ensure that all the parameters being passed have valid values. ] (at /paddle/paddle/fluid/platform/device/gpu/cuda/cuda_helper.h:87)[operator < uniform_random > error]

飞桨版本出错,因为是切换到gpu环境,安装的时候选了cuda11版本的飞桨,安装后报错。
选择飞桨cuda10.1版本的,就ok了

后期是采用系统自带的飞桨2.3正式版本,就没有安装的烦恼了。

执行python ldc2d.py的时候报错

epoch/num_epoch:  29999 / 30000 batch/num_batch:  1 / 1 loss:  0.83008355 eq_loss:  0.5134626 bc_loss:  0.652223
epoch/num_epoch:  30000 / 30000 batch/num_batch:  1 / 1 loss:  0.7781308 eq_loss:  0.47800368 bc_loss:  0.61400324
Traceback (most recent call last):File "ldc2d.py", line 97, in <module>openfoam_u = np.load("./openfoam/openfoam_u_100.npy")File "/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/numpy/lib/npyio.py", line 417, in loadfid = stack.enter_context(open(os_fspath(file), "rb"))
FileNotFoundError: [Errno 2] No such file or directory: './openfoam/openfoam_u_100.npy'

原来是还有一个目录没有cp到当前目录,使用命令cp -r examples/ldc2d/openfoam . 即可。

后期是采用setup安装科学工具包来解决路径依赖问题。

报错unexpected keyword argument ‘space_steps’

---------------------------------------------------------------------------TypeError                                 Traceback (most recent call last)/tmp/ipykernel_444/2834758931.py in <module>
----> 1 pdes, geo = psci.discretize(pdes, geo, space_steps=(101, 101))
TypeError: discretize() got an unexpected keyword argument 'space_steps'

原因是应该是space_nsteps,命令为pdes, geo = psci.discretize(pdes, geo, space_steps=(101, 101)) ,文档有误。

新版本已经解决该问题。

报错Received [3] in X is not equal to [2] in Y at i:1

/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/paddle/fluid/dygraph/math_op_patch.py in __impl__(self, other_var)262             axis = -1263             math_op = getattr(_C_ops, op_type)
--> 264             return math_op(self, other_var, 'axis', axis)265 266         comment = OpProtoHolder.instance().get_op_proto(op_type).comment
ValueError: (InvalidArgument) Broadcast dimension mismatch. Operands could not be broadcast together with the shape of X = [400, 3] and the shape of Y = [400, 2]. Received [3] in X is not equal to [2] in Y at i:1.[Hint: Expected x_dims_array[i] == y_dims_array[i] || x_dims_array[i] <= 1 || y_dims_array[i] <= 1 == true, but received x_dims_array[i] == y_dims_array[i] || x_dims_array[i] <= 1 || y_dims_array[i] <= 1:0 != true:1.] (at /paddle/paddle/pten/kernels/hybird/general/elementwise_base.h:373)[operator < elementwise_sub > error]

解决方法,将pdes.set_bc_value(bc_value=bc_value)修改为:
pdes.set_bc_value(bc_value=bc_value, bc_check_dim=[0, 1])

30000步报None

epoch/num_epoch:  29999 / 30000 batch/num_batch:  1 / 1 loss:  nan eq_loss:  nan bc_loss:  nan
epoch/num_epoch:  30000 / 30000 batch/num_batch:  1 / 1 loss:  nan eq_loss:  nan bc_loss:  nan
MSE_u:  nan
MSE_v:  nan
MSE_u_400:  nan
MSE_v_400:  nan

通过报issue得知,换新的飞桨开发版就好了。

最终飞桨2.3正式版之后的都可以。

环境变量设置问题

在AIStudio notebook下环境变量设置有些坑,比如命令行下使用export PYTHONPATH=$PYTHONPATH:/home/aistudio/PaddleScience/,然后就可以正常使用科学包了。而在notebook下,使用%env PYTHONPATH=$PYTHONPATH:/home/aistudio/PaddleScience/或者env PYTHONPATH=/home/aistudio/PaddleScience/都不能正常导入科学工具包,即import paddlescience会报错。

最终解决方法是写setup.py文件,手动安装科学工具包。

报错hijack_call.c:658 cuInit error unknown error

!python laplace2d.py 报错
重启,用飞桨2.3版本

报错No module named ‘sympy’

    import sympy
ModuleNotFoundError: No module named 'sympy'

解决方法:使用AIStudio经典版。即不使用BML版本。

结束语

用飞桨,划时代!让我们荡起双桨,在AI的海洋乘风破浪!

飞桨官网:https://www.paddlepaddle.org.cn

因为水平有限,难免有不足之处,还请大家多多帮助。

作者:段春华, 网名skywalk 或 天马行空,济宁市极快软件科技有限公司的AI架构师,百度飞桨PPDE。

我在AI Studio上获得至尊等级,点亮11个徽章,来关注啊~ https://aistudio.baidu.com/aistudio/personalcenter/thirdview/141218

原项目链接:https://aistudio.baidu.com/aistudio/projectdetail/4278591

实践学习PaddleScience飞桨科学工具包相关推荐

  1. 赛桨PaddleScience v1.0正式版发布,飞桨科学计算能力全面升级!

    AI for Science日益表现出突破传统科学研究能力瓶颈的巨大潜力,正在成为全球科学研究新范式.近年来,各学科不断加入,模型精度.泛化性逐渐提高,不同技术路径.不同应用场景的AI for Sci ...

  2. 赛桨PaddleScience v1.0 Beta:基于飞桨核心框架的科学计算通用求解器

    近年来,关于AI for Science的主题被广泛讨论,重点领域包含使用AI方法加速设计并发现新材料,助力高能物理及天文领域的新问题探索,以及加速智慧工业实时设备数据与模型的"数字孪生&q ...

  3. 飞桨AI4S污染物扩散快速预测模型,亮相全国数据驱动计算力学研讨会

    5月19-21日,第一届全国数据驱动计算力学研讨会在大连召开.本次研讨会由中国力学学会主办,大连理工大学运载工程与力学学部承办,北京理工大学先进结构技术研究院协办. 会议共吸引了400多位来自全国各地 ...

  4. 为技术而聚,为AI而战,飞桨黑客马拉松第三期圆满收官!

    2022年7月4日PaddlePaddle Hackathon飞桨黑客马拉松(以下简称为"飞桨黑客松")第三期正式上线,开发者热情响应,历经三个月完美收官! 本期飞桨黑客松依然是码 ...

  5. 飞桨框架v2.3 API最新升级 | 对科学计算、概率分布和稀疏Tensor等提供更全面支持

    本文已在飞桨公众号发布,查看请戳链接: 飞桨框架v2.3 API最新升级!对科学计算.概率分布和稀疏Tensor等提供更全面支持! 2022年5月飞桨框架2.3版本正式发布,相比飞桨框架2.2版本,A ...

  6. 飞桨框架v2.3 API最新升级!对科学计算、概率分布和稀疏Tensor等提供更全面支持!...

    2022年5月飞桨框架2.3版本正式发布,相比飞桨框架2.2版本,API体系更加丰富,新增了100多个API,覆盖自动微分.概率分布.稀疏Tensor.拟牛顿优化器.线性代数.框架性能分析.硬件设备管 ...

  7. 人工智能助力生命科学新发展 | 飞桨博士会第十一期

    生命体中,大量的奇妙数据与人类未来息息相关,而人工智能技术的日渐成熟,使得诸多研究领域中数据处理.计算精度等传统问题得以解决,生命科学也正迎来数据驱动的新时代,计算机科学与生命科学的结合势不可挡. 那 ...

  8. 基于飞桨的小样本学习工具包助你举一反三

    王雅晴,PaddleFSL负责人.飞桨高级开发者技术专家(高级PPDE).2019年博士毕业于香港科技大学计算机科学及工程学系.通过百度公司AIDU计划加入百度研究院商业智能实验室,现任资深研发工程师 ...

  9. 深度学习入门实践学习——手写数字识别(百度飞桨平台)——上篇

    一.项目平台 百度飞桨 二.项目框架 1.数据处理: 2.模型设计:网络结构,损失函数: 3.训练配置:优化器,资源配置: 4.训练过程: 5.保存加载. 三.手写数字识别任务 1.构建神经网络流程: ...

最新文章

  1. Emacs Org-mode学习笔记
  2. golang tcp keepalive实践
  3. Maven编译项目时报错:不再支持源选项 5。请使用 6 或更高版本。 不再支持目标选项 1.5。请使用 1.6 或更高版本。
  4. linux 脚本中的push,linux shell之pushd、popd和dirs的使用讲解
  5. 最近一段时间遇到的费了时间的问题
  6. C#实现WEB服务器
  7. Paradigm此前投资Uniswap的资金价值或超30亿美元
  8. java中注解操作redis_spring boot —— redis 缓存注解使用教程
  9. 前端技术周刊 2019-02-11 Serverless
  10. 处理ajax表单验证结果,使用 jQuery Form 插件完成带数据验证的 Ajax 表单
  11. 论文中的三线表绘制(word)
  12. js截取指定字符分割字符串
  13. linux系统下查看本机所在局域网中所有设备IP
  14. 绘制微信字体大小调节器
  15. ios开发之使用bundle来管理资源文件
  16. 为什么我没圣诞帽!?微信一键生成圣诞帽方法
  17. Strings Mix
  18. 扫拖地机器人预留_扫地机器人需要注意几个点?拖扫组合受追捧!
  19. 如何在Mac上查找WiFi密码并在iPhone上共享它?
  20. 干掉Intel、AMD?国产处理器架构都有哪些?

热门文章

  1. 保存DC到bmp图片的两种方法
  2. 《Google软件测试之道》有感
  3. inux 学习书目推荐
  4. 虚拟机 网络模式简介 及桥接模式设置
  5. 《如何有效阅读一本书》读书笔记
  6. 计算机与生殖学,生殖叶学说
  7. SnackBar 简单使用
  8. 双边带调幅DSB-SC和解调的matlab仿真
  9. 什么叫喜欢一个人 对一个人有好感又是什么 爱一个人又是什么呢
  10. MATLAB的图像融合设计