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

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

动手实践,在实践中学习!本项目可以在AIStudio平台一键运行!地址:https://aistudio.baidu.com/projectdetail/4278591 本项目第一次执行会报错,再执行一次即可。若碰到莫名其妙的报错,换成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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/238737.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++ | 四、指针、链表

指针 指针用来储存地址定义方式&#xff0c;int *ptr;&#xff0c;使用*来表示所定义的变量是指针取地址符&#xff0c;ptr &a;&#xff0c;通过&来取得一个普通变量的地址&#xff0c;并储存到指针中取值&#xff08;解引用&#xff09;&#xff0c;想要取得一个指针…

15.鸿蒙HarmonyOS App(JAVA)进度条与圆形进度条

15.鸿蒙HarmonyOS App(JAVA)进度条与圆形进度条 progressBar2.setIndeterminate(true);//设置无限模式,运行查看动态效果 //创建并设置无限模式元素 ShapeElement element new ShapeElement(); element.setBounds(0,0,50,50); element.setRgbColor(new RgbColor(255,0,0)); …

排序——计数排序

文章目录 概念思路绝对映射&#xff1a;相对映射 代码实现特性结果演示 概念 计数排序是一个非基于比较的排序算法&#xff0c;该算法于1954年由 Harold H. Seward 提出。它的优势在于在对一定范围内的整数排序时&#xff0c;它的复杂度为Ο(nk)&#xff08;其中k是整数的范围…

typora导出html添加目录

typora导出html添加目录 使用方法 首先要从typora导出html文件&#xff0c;之后用记事本编辑器html文件 找到文档最后面&#xff0c;如图&#xff1a; 用文字编辑类工具打开sideBar.txt&#xff0c;复制其中所有内容【内容在下面】 在如上图的位置插入所复制的内容 打开修改…

【深入挖掘Java技术】「源码原理体系」盲点问题解析之HashMap工作原理全揭秘(上)

HashMap工作原理全揭秘 — 核心源码解析 知识盲点概念介绍数据结构数组链表数组VS链表哈希表不同JVM版本HashMap的展现形式 HashMap VS HashTable特性区别对比 hashcodehashCode的作用equals方法和hashcode的关系key为null怎么办执行步骤 核心参数容量探讨负载因子探讨加载因子…

usb个人总结

一、usb工具分析 1、不同的usb抓包工具抓包分析 2、USB抓包分析方式 外接usb分析仪分析 &#xff08;1&#xff09;力科usb分析仪 &#xff08;2&#xff09;HD-USB12 协议分析仪 &#xff08;3&#xff09;沁恒CH552 usb分析仪&#xff0c;软件工具USB2.0 Monitor (4)等等…

PHP留言板实现

完整教程PHP留言板 登陆界面 一个初学者的留言板&#xff08;登录和注册&#xff09;_php留言板登录注册-CSDN博客 留言板功能介绍 百度网盘 请输入提取码 进入百度网盘后&#xff0c;输入提取码&#xff1a;knxt&#xff0c;即可下载项目素材和游客访问页面的模板文件。 &…

基于springboot书籍学习平台源码和论文

首先,论文一开始便是清楚的论述了平台的研究内容。其次,剖析平台需求分析,弄明白“做什么”,分析包括业务分析和业务流程的分析以及用例分析,更进一步明确平台的需求。然后在明白了平台的需求基础上需要进一步地设计平台,主要包罗软件架构模式、整体功能模块、数据库设计。本项…

数学建模-Matlab R2022a安装步骤

软件介绍 MATLAB是一款商业数学软件&#xff0c;用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境&#xff0c;主要包括MATLAB和Simulink两大部分&#xff0c;可以进行矩阵运算、绘制函数和数据、实现算法、创建用户界面、连接其他编程语言的程…

行云部署成长之路 -- 慢 SQL 优化之旅 | 京东云技术团队

当项目的SQL查询慢得像蜗牛爬行时&#xff0c;用户的耐心也在一点点被消耗&#xff0c;作为研发&#xff0c;我们可不想看到这样的事。这篇文章将结合行云部署项目的实践经验&#xff0c;带你走进SQL优化的奇妙世界&#xff0c;一起探索如何让那些龟速的查询飞起来&#xff01;…

【C++干货铺】会旋转的二叉树——AVLTree

个人主页点击直达&#xff1a;小白不是程序媛 C系列专栏&#xff1a;C干货铺 代码仓库&#xff1a;Gitee 目录 前言 AVL树 AVL树的概念 AVL树结点的定义 AVL树的插入 寻找插入结点的位置 修改平衡因子 AVL树的旋转 右单旋 左单旋 先右旋再左旋 先左旋再右旋 AVL树…

SpringBoot多环境配置Maven Profile组

Maven profile组 注意切换配置时 mvn clean下 或者 clean 加install 或者compile 编译 clean之后 install下 或者compile 编译 nohup java -Xms256m -Xmx512m -Dfile.encodingUTF-8 -jar demo.jar --spring.profiles.activeprod > system.log 2>&1 &

数据交付变革:研发到产运自助化的转型之路

作者 | Chris 导读 本文讲述为了提升产运侧数据观察、分析、决策的效率&#xff0c;支持业务的快速迭代&#xff0c;移动生态数据研发部对数仓建模与BI工具完成升级&#xff0c;采用宽表建模与TDA平台相结合的方案&#xff0c;一站式自助解决数据应用需求。在此过程中&#xff…

软件测试|如何使用selenium操作窗口滚动条

简介 我们在进行自动化测试工作的时候&#xff0c;如果页面内容过多&#xff0c;一次性加载耗时太长的话&#xff0c;会使用分段加载来加载页面内容&#xff0c;比如开始只加载页面顶端的内容&#xff0c;而如果要加载更多的数据&#xff0c;就需要我们向下滑动&#xff0c;让…

跳跃游戏,经典算法实战。

&#x1f3c6;作者简介&#xff0c;普修罗双战士&#xff0c;一直追求不断学习和成长&#xff0c;在技术的道路上持续探索和实践。 &#x1f3c6;多年互联网行业从业经验&#xff0c;历任核心研发工程师&#xff0c;项目技术负责人。 &#x1f389;欢迎 &#x1f44d;点赞✍评论…

Go 优雅判断 interface 是否为 nil

关注公众号【爱发白日梦的后端】分享技术干货、读书笔记、开源项目、实战经验、高效开发工具等&#xff0c;您的关注将是我的更新动力&#xff01; 背景 很久之前发过一篇文章&#xff1a;《10个令人惊叹的Go语言技巧&#xff0c;让你的代码更加优雅》&#xff0c;这篇文章中第…

Dockerfile: CMD与ENTRYPOINT区别

CMD和ENTRYPOINT的作用 CMD和ENTRYPOINT这两个命令&#xff0c;我接触到的是用在了Dockerfile中用于构建容器。 CMD&#xff1a;The main purpose of a CMD is to provide defaults for an executing container. CMD的主要用途是为正在执行的容器提供默认值。也就是指定这个容…

如何用ArcGIS制作城市用地适应性评价

01概述 “城市用地适宜性评价是城市总体规划的一项重要前期工作&#xff0c;它首先对工程地质、社会经济和生态环境等要素进行单项用地适宜性评价&#xff0c;然后用地图叠加技术根据每个因子所占权重生成综合的用地适宜性评价结果&#xff0c;俗称“千层饼模式”。 做用地适…

外包干了4年,废了···

有一说一&#xff0c;外包没有给很高的薪资&#xff0c;是真不能干呀&#xff01; 先说一下自己的情况&#xff0c;大专生&#xff0c;19年通过校招进入湖南某软件公司&#xff0c;干了接近4年的功能测试&#xff0c;今年年初&#xff0c;感觉自己不能够在这样下去了&#xff0…

tensorflow报错: DNN library is no found

错误描述 如上图在执行程序的时候&#xff0c;会出现 DNN library is no found 的报错 解决办法 这个错误基本上说明你安装的 cudnn有问题&#xff0c;或者没有安装这个工具。 首先检测一下你是否安装了 cudnn 进入CUDA_HOME下&#xff0c;也就是进入你的cuda的驱动的安装目…