实践学习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.mzph.cn/news/625490.shtml

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

相关文章

数据可视化大屏自适应,保持比例不变形,满足不同分辨率的需求——利用transform的scale属性缩放,缩放整个页面。

文章目录 一、需求背景&#xff1a;二、需求分析&#xff1a;三、选择方案&#xff1a;四、实现代码&#xff1a;五、效果预览&#xff1a;六、封装组件&#xff1a; 一、需求背景&#xff1a; 数据可视化大屏是一种将数据、信息和可视化效果集中展示在一块或多块大屏幕上的技…

2020年财政收支

偶感兴趣&#xff0c;花了点时间整理 有兴趣的可以参照下面的链接整理完整2022年的数据&#xff0c;2023年的数据还有12月份的数据未出&#xff0c;估计在这几天出。 附 2022年的财政收支情况 2022年基金支出预算表 2020年的社保收入是7.6万亿。 上图个税金额写错了&#xff0c…

Mindspore 公开课 - CodeGeeX

CodeGeeX: 多语言代码生成模型 CodeGeeX 是一个具有130亿参数的多编程语言代码生成预训练模型。CodeGeeX采用华为MindSpore框架实现&#xff0c;在鹏城实验室“鹏城云脑II”中的192个节点&#xff08;共1536个国产昇腾910 AI处理器&#xff09;上训练而成。截至2022年6月22日&…

数据库结构文档生成方法二(EZDML)

EZDML 下载链接&#xff1a;EZDML - 下载 我们常用的是数据建模有PowerDesigner,EZDML也是一款数据建模工具&#xff0c;而且功能很多&#xff0c;除了生成sql&#xff0c;还可以生成前端后端代码等等。 我们直接下载最新版后点击安装&#xff0c;打开后会默认打开示例&#…

基于springboot数码论坛系统源码和论文

网络的广泛应用给生活带来了十分的便利。所以把数码论坛与现在网络相结合&#xff0c;利用java技术建设数码论坛系统&#xff0c;实现数码论坛的信息化。则对于进一步提高数码论坛发展&#xff0c;丰富数码论坛经验能起到不少的促进作用。 数码论坛系统能够通过互联网得到广泛…

window系统安装MySQL -- MySQL(1)

第一步&#xff1a; 下载mysql安装包 1&#xff09;打开MySQL官方链接&#xff1a;https://www.mysql.com 2&#xff09;选择 DOWNLOADS 3&#xff09;往下滑&#xff0c;点击社区版本下载 4&#xff09;点击 MySQL installer for Windows 5&#xff09;点击安装 第二步&#…

2024年腾讯云服务器购买价格,真便宜

腾讯云服务器租用价格表&#xff1a;轻量应用服务器2核2G3M价格62元一年、2核2G4M价格118元一年&#xff0c;540元三年、2核4G5M带宽218元一年&#xff0c;2核4G5M带宽756元三年、轻量4核8G12M服务器446元一年、646元15个月&#xff0c;云服务器CVM S5实例2核2G配置280.8元一年…

细说JavaScript对象(JavaScript对象详解)

在JavaScript中对象作为数据类型之一&#xff0c;它的数据结构区别于其余5中数据类型&#xff0c;从数据结构角度看对象就是数据值的几个&#xff0c;其书就结构就是若干组名值对&#xff0c;类似于其他语言中的哈希、散列 关联数组等&#xff0c;但对象在JavaScript中不仅仅扮…

如何通过pytest+requests+allure自动化测试接入Jenkins?测开必备

最近在这整理知识&#xff0c;发现在pytest的知识文档缺少系统性&#xff0c;这里整理一下&#xff0c;方便后续回忆。 在python中&#xff0c;大家比较熟悉的两个框架是unittest和pytest&#xff1a; Unittest是Python标准库中自带的单元测试框架&#xff0c;Unittest有时候也…

2024腾讯云服务器购买指南一步步全流程攻略(超详细)

腾讯云服务器购买流程很简单&#xff0c;有两种购买方式&#xff0c;直接在官方活动上购买比较划算&#xff0c;在云服务器CVM或轻量应用服务器页面自定义购买价格比较贵&#xff0c;但是自定义购买云服务器CPU内存带宽配置选择范围广&#xff0c;活动上购买只能选择固定的活动…

基于SPI的插件式开发实现方案之@AutoService+ServiceLoader介绍及Dolphinscheduler中的实际应用

1.插件化开发概述 插件化开发模式正在很多编程语言或技术框架中得以广泛的应用实践&#xff0c;比如大家熟悉的jenkins&#xff0c;docker可视化管理平台rancher&#xff0c;以及日常编码使用的编辑器idea&#xff0c;vscode等。 实现服务模块之间解耦的方式有很多&#xff0…

22.实战演练--记住密码和登录状态

在登录注册案例的基础上&#xff0c;实现一个相对完整的登录注册模块 (1).记住密码 (2).记住登录状态&#xff08;自动登录&#xff09; (3).注册成功&#xff0c;登录成功&#xff0c;退出登录时的页面跳转

雍禾医疗好医生:雍禾植发张华医生立志服务好毛发患者

作为中国领先的专门从事毛发医疗服务的医疗集团&#xff0c;雍禾医疗提供诊疗、植发、养固等一站式毛发医疗服务&#xff0c;旗下拥有由专业植发品牌“雍禾植发”、医疗养固品牌“史云逊”、女性美学植发品牌“雍禾发之初”及医学假发品牌“哈发达”等组成的全产业链品牌矩阵。…

MySQL 协议(非常详细适合小白学习)

MySQL 查询过程 MySQL 查询过程大致如下&#xff1a; 1&#xff09;客户端与服务器端建立连接&#xff1b; 2&#xff09;客户端登陆 MySQL&#xff1b; 3&#xff09;客户端向服务器端发起一条请求&#xff1b; 4&#xff09;服务器端先检查查询缓存&#xff0c;如果命中缓…

哈希(hash)

目录 一、什么是哈希 二、哈希冲突 三、哈希函数 3.1、哈希函数设计原则 3.2、常见的哈希函数 四、哈希冲突解决 4.1、闭散列 4.2、开散列 五、哈希表的模拟实现 5.1、哈希表的功能模拟实现 5.2、测试模拟实现&#xff1a; 一、什么是哈希 如果构造一种存储结构&…

实例分割模型Mask2Former解析

Masked2Former是在mask rcnn基础上改进的一个实例分割模型&#xff0c;参考了一些经典模型的思想&#xff0c;如DETR&#xff0c;实验表明效果很好。 论文&#xff1a;《Masked-attention Mask Transformer for Universal Image Segmentation》 https://arxiv.org/abs/2112.0…

新手必看:腾讯云服务器购买详细图文教程

腾讯云服务器购买流程很简单&#xff0c;有两种购买方式&#xff0c;直接在官方活动上购买比较划算&#xff0c;在云服务器CVM或轻量应用服务器页面自定义购买价格比较贵&#xff0c;但是自定义购买云服务器CPU内存带宽配置选择范围广&#xff0c;活动上购买只能选择固定的活动…

【极光系列】Windows安装Mysql8.0版本

【极光系列】Windows安装Mysql8.0版本 一.mysql服务端 下载地址&#xff1a;https://dev.mysql.com/downloads/mysql/ 二.解压二进制包 解压到 E:\mysql-8.0.35-winx64目录下&#xff0c;记住你解压后的目录&#xff0c;后续要使用三.创建my.ini文件 tips&#xff1a;mys…

nvcc -V显示command not found

出现这个问题&#xff0c;不仅是 nvcc -V会显示command not found,nvidia-smi同样也会显示 解决方法如下&#xff1a; 1&#xff09;这里首先转换到CUDA所在位置&#xff0c;一般是在这个位置 cd /usr/local 2&#xff09;打开、编辑环境变量的配置文件 vim ~/.bashrc …

使用HTTP/2在Linux上的Nginx服务器进行优化

随着互联网的发展&#xff0c;HTTP/2协议逐渐成为主流。与传统的HTTP/1.1相比&#xff0c;HTTP/2提供了更高的传输效率和更好的安全性。在Linux上使用Nginx服务器进行优化&#xff0c;我们可以充分利用HTTP/2的优势&#xff0c;提高网站的性能和用户体验。 1. 安装Nginx并启用…