中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁(yè) > news >正文

python網(wǎng)站開(kāi)發(fā)代碼成功營(yíng)銷案例分享

python網(wǎng)站開(kāi)發(fā)代碼,成功營(yíng)銷案例分享,臺(tái)州網(wǎng)站制作策劃,游戲介紹網(wǎng)站模板下載地址實(shí)踐學(xué)習(xí)PaddleScience飛槳科學(xué)工具包 動(dòng)手實(shí)踐,在實(shí)踐中學(xué)習(xí)!本項(xiàng)目可以在AIStudio平臺(tái)一鍵運(yùn)行!地址:https://aistudio.baidu.com/projectdetail/4278591 本項(xiàng)目第一次執(zhí)行會(huì)報(bào)錯(cuò),再執(zhí)行一次即可。若碰到莫名其妙的…

實(shí)踐學(xué)習(xí)PaddleScience飛槳科學(xué)工具包

動(dòng)手實(shí)踐,在實(shí)踐中學(xué)習(xí)!本項(xiàng)目可以在AIStudio平臺(tái)一鍵運(yùn)行!地址:https://aistudio.baidu.com/projectdetail/4278591 本項(xiàng)目第一次執(zhí)行會(huì)報(bào)錯(cuò),再執(zhí)行一次即可。若碰到莫名其妙的報(bào)錯(cuò),換成32G顯存環(huán)境試試。

要平視愛(ài)因斯坦和牛頓

愛(ài)因斯坦和牛頓也是普通人,也有認(rèn)識(shí)不到的地方,不要盲目崇拜,也不要一味否定前人的實(shí)踐,而要對(duì)前人的成果,尊重客觀事實(shí),辯證的一分為二的學(xué)習(xí)、實(shí)踐和吸收,要站在牛頓和愛(ài)因斯坦的肩膀上,與他們平視。 --張永德(原話記錄,有些許異同)

AIStudio和飛槳科學(xué)工具包,溝通理論和實(shí)踐,讓我們與頂級(jí)科學(xué)家站在同一起跑線上!

一、PaddleScience飛槳科學(xué)工具包簡(jiǎn)介

官網(wǎng)github地址:https://github.com/PaddlePaddle/PaddleScience

PaddleScience 使用可重用的軟件組件擴(kuò)展了 PaddlePaddle 框架,用于開(kāi)發(fā)新穎的科學(xué)計(jì)算應(yīng)用程序。此類新應(yīng)用包括基于物理的機(jī)器學(xué)習(xí)、基于神經(jīng)網(wǎng)絡(luò)的 PDE 求解器、CFD 機(jī)器學(xué)習(xí)等。PaddleScience 目前正在積極開(kāi)發(fā)中。它的設(shè)計(jì)不斷發(fā)展,其 API 可能會(huì)發(fā)生變化。

1、核心組件

核心功能和組織
PaddleScience 目前專注于 PINNs 模型。核心組件如下。

Geometry幾何學(xué),一個(gè)用于定義幾何域的聲明式接口。支持自動(dòng)離散化

Neural net神經(jīng)網(wǎng)絡(luò),目前支持可自定義大小和深度的全連接層。

PDE偏微分方程,以符號(hào)形式描繪偏微分方程。特定 PDE 派生基本 PDE 類。當(dāng)前包括兩個(gè)原生 PDE:Laplace2d 和 NavierStokes2d。

Loss損失,定義在訓(xùn)練過(guò)程中執(zhí)行的確切懲罰。默認(rèn)情況下,應(yīng)用 L2 損失。在目前的設(shè)計(jì)中,總損失是方程損失、邊界條件損失和初始條件損失三部分的加權(quán)和。

Optimizer優(yōu)化器,指定用于訓(xùn)練的優(yōu)化器。Adam 是默認(rèn)選項(xiàng)。未來(lái)將提供更多優(yōu)化器,例如 BFGS。

Solver求解器,以批處理方式管理給定訓(xùn)練數(shù)據(jù)的訓(xùn)練過(guò)程。

Visualization可視化,可輕松訪問(wèn)圖形繪制實(shí)用程序。

2、物理信息神經(jīng)網(wǎng)絡(luò)(PINN)簡(jiǎn)介

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

【PINN】基于物理信息的神經(jīng)網(wǎng)絡(luò) (Physics Informed Neural Network,簡(jiǎn)稱PINN) 是一種科學(xué)機(jī)器在傳統(tǒng)數(shù)值領(lǐng)域的應(yīng)用方法,特別是用于解決與偏微分方程 (PDE) 相關(guān)的各種問(wèn)題,包括方程求解、參數(shù)反演、模型發(fā)現(xiàn)、控制與優(yōu)化等。

大多數(shù)物理規(guī)律都可以表述為偏微分方程(PDE)的形式。偏微分方程,尤其是高階偏微分方程難以求解析解,通常是采用各種方式逼近從而獲得近似解。而神經(jīng)網(wǎng)絡(luò)的強(qiáng)大之處就在于其是萬(wàn)能近似器(universal approximator)

PaddlePaddle的神經(jīng)網(wǎng)絡(luò)核心是自動(dòng)微分,其實(shí)一個(gè)AI框架主要就是完成兩部分:1、Tensor張量的存儲(chǔ)與計(jì)算 2、自動(dòng)微分。
飛槳的自動(dòng)微分是通過(guò)trace的方式,記錄前向OP的執(zhí)行,并自動(dòng)創(chuàng)建反向var和添加相應(yīng)的反向OP,然后來(lái)實(shí)現(xiàn)反向梯度計(jì)算的。

3、Vtk介紹

參見(jiàn):https://www.cnblogs.com/zhhfan/p/10312170.html

Vtk,(visualization toolkit)是一個(gè)開(kāi)源的免費(fèi)軟件系統(tǒng),主要用于三維計(jì)算機(jī)圖形學(xué)、圖像處理和可視化。Vtk是在面向?qū)ο笤淼幕A(chǔ)上設(shè)計(jì)和實(shí)現(xiàn)的,它的內(nèi)核是用C++構(gòu)建的,包含有大約250,000行代碼,2000多個(gè)類,還包含有幾個(gè)轉(zhuǎn)換界面,因此也可以自由的通過(guò)Java,Tcl/Tk和Python各種語(yǔ)言使用vtk。以下介紹VTK對(duì)于STL圖像的基本操作

基礎(chǔ)概念

  • 數(shù)據(jù)源 resource: cone = vtk.vtkConeSource()
  • 映射器 mapper:coneMapper = vtk.vtkPolyDataMapper()
  • 映射器添加數(shù)據(jù)源: 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()

如何打開(kāi)vtp文件,見(jiàn)“相關(guān)問(wèn)題和技巧”部分。

二、飛槳科學(xué)工具包安裝

若只需要執(zhí)行例子里的.py文件,則只要加上環(huán)境變量即可%env PYTHONPATH=/home/aistudio/PaddleScience。見(jiàn)實(shí)踐三部分。

若需要使用Notebook模式,進(jìn)行代碼分塊編寫和執(zhí)行,則需要安裝飛槳科學(xué)包,本項(xiàng)目里采用手寫setup.py安裝文件的方式,幫著飛槳科學(xué)工具包實(shí)現(xiàn)安裝功能。見(jiàn)實(shí)踐一和實(shí)踐二部分。

1、 環(huán)境設(shè)置

本項(xiàng)目第一個(gè)例子以notebook模式展示,因此需要安裝飛槳科學(xué)包,步驟會(huì)略顯繁瑣。

安裝相關(guān)庫(kù)文件

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

下載飛槳科學(xué)工具包源碼。

源碼中有例子可以用來(lái)研究學(xué)習(xí)。

%cd ~/
# !pip install pip -U --user
!git clone https://github.com/PaddlePaddle/PaddleScience # 下載代碼
# 更新軟件,可不執(zhí)行
# !cd ~/PaddleScience/ && git pull

寫安裝配置文件

因?yàn)樵渲梦募邪膸?kù)較多,在setup安裝時(shí)會(huì)卡住,所以單獨(dú)寫一個(gè)只有一個(gè)包的配置文件。

命令行運(yùn)行這步可省略。

%%writefile ~/PaddleScience/requirements_setup.txt
numpy

寫飛槳科學(xué)包setup.py安裝文件

setup安裝之后,就可以不局限于執(zhí)行路徑了。

命令行運(yùn)行這步可省略。

%%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文件就是我們前面寫的那個(gè)文件。
也可以使用開(kāi)發(fā)模式命令是python setup.py develop

命令行運(yùn)行這步可省略。

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

驗(yàn)證

測(cè)試一下,看飛槳科學(xué)工具包是否安裝成功。第一次執(zhí)行可能報(bào)錯(cuò),重啟環(huán)境(使setup生效)再次運(yùn)行即可。

沒(méi)有error報(bào)錯(cuò)則證明安裝成功!

命令行運(yùn)行這步可省略。

# 第一次執(zhí)行可能報(bào)錯(cuò),重啟環(huán)境(使setup生效)再次運(yùn)行即可。
import paddlescience

三、實(shí)踐1、頂蓋驅(qū)動(dòng)型腔流

本指南介紹了如何構(gòu)建 PINN 模型來(lái)模擬 PaddleScience 中的 2d Lid Driven Cavity (LDC) 流動(dòng)。

1、介紹

LDC 問(wèn)題模擬了一個(gè)充滿液體的容器,其中蓋子以恒定速度沿水平方向移動(dòng)。目標(biāo)是計(jì)算系統(tǒng)處于穩(wěn)態(tài)時(shí)容器中每個(gè)內(nèi)部點(diǎn)的液體速度。

下圖顯示了訓(xùn)練 100 x 100 網(wǎng)格生成的結(jié)果。分別顯示速度的垂直和水平分量。

2、如何構(gòu)建PINN模型

PINN 模型由過(guò)去的傳統(tǒng) PDE 設(shè)置和近似解的神經(jīng)網(wǎng)絡(luò)共同組成。PDE 部分包括執(zhí)行物理定律的特定微分方程、限定問(wèn)題域的幾何形狀以及可以找到解決方案的初始和邊界值條件。神經(jīng)網(wǎng)絡(luò)部分可以采用深度學(xué)習(xí)工具包中廣泛存在的典型前饋網(wǎng)絡(luò)的變體。

要獲得 PINN 模型,需要訓(xùn)練神經(jīng)網(wǎng)絡(luò)。正是在這個(gè)階段,PDE 的信息通過(guò)反向傳播被灌輸?shù)缴窠?jīng)網(wǎng)絡(luò)中。損失函數(shù)在控制如何分配這些信息方面起著至關(guān)重要的作用,強(qiáng)調(diào) PDE 的不同方面,例如,通過(guò)調(diào)整方程殘差和邊界值的權(quán)重。

概念明確后,接下來(lái)讓我們看一下如何將其轉(zhuǎn)換為 ldc2d 示例。

3、構(gòu)造幾何體psci.geometry

首先,使用模塊接口定義問(wèn)題幾何體。在此示例中,幾何體是一個(gè)矩形,其原點(diǎn)位于坐標(biāo) (-0.05, -0.05),范圍設(shè)置為 (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))

接下來(lái),為幾何圖形添加邊界,這些邊界將在 PDE 中使用。請(qǐng)注意,該geo.add_boundary函數(shù)僅用于具有物理約束的邊界。


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)

準(zhǔn)備好域后,給出離散化方法。

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

4、構(gòu)建偏微分方程

定義幾何部分后,定義要求解的 PDE 方程。在本例中,方程是 2d Navier Stokes。這個(gè)方程存在于科學(xué)工具包中,只需要?jiǎng)?chuàng)建一個(gè)psci.pde.NavierStokes對(duì)象來(lái)設(shè)置方程。

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

接下來(lái),為 PDE 添加邊界方程。PDE 中的邊界方程與幾何中的邊界定義密切相關(guān)。使用pde.add_bc設(shè)置邊界上的物理信息.

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)

一旦準(zhǔn)備好方程和問(wèn)題域,就應(yīng)該給出離散化方法。此方法將用于在訓(xùn)練開(kāi)始之前生成訓(xùn)練數(shù)據(jù)。目前,可以將二維空間離散化為 N×M 網(wǎng)格,在本例中具體為 101×101。


pde_disc = pde.discretize(geo_disc=geo_disc)

5、構(gòu)建神經(jīng)網(wǎng)絡(luò)

現(xiàn)在 PDE 部分幾乎完成了,我們繼續(xù)構(gòu)建神經(jīng)網(wǎng)絡(luò)。通過(guò)創(chuàng)建psci.network.FCNet對(duì)象來(lái)定義完全連接的網(wǎng)絡(luò)很簡(jiǎn)單。以下是我們?nèi)绾蝿?chuàng)建一個(gè)由 10 個(gè)隱藏層組成的 FFN,每個(gè)隱藏層有 20 個(gè)神經(jīng)元,使用雙曲正切作為激活函數(shù)。

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

接下來(lái),最重要的步驟之一是定義損失函數(shù)。這里我們使用 L2 損失。

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

通過(guò)設(shè)計(jì),該loss對(duì)象傳達(dá)了 PDE 的完整信息?,F(xiàn)在結(jié)合神經(jīng)網(wǎng)絡(luò)和損失,我們創(chuàng)建psci.algorithm.PINNs模型算法。

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

接下來(lái),通過(guò)插入 Adam 優(yōu)化器,構(gòu)建求解器,就可以開(kāi)始訓(xùn)練了。在此示例中,使用了 Adam 優(yōu)化器,并給出了 0.001 的學(xué)習(xí)率。

該類將此處psci.solver.Solver調(diào)用的 PINNs 模型和優(yōu)化器捆綁到公開(kāi)接口 algo的求解器對(duì)象中。接受一個(gè)關(guān)鍵字參數(shù),指定每個(gè)批次的 epoch 數(shù)。

# 300epoch 用時(shí)40秒。30000估計(jì)用時(shí)4000秒,約一小時(shí)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返回一個(gè)函數(shù),該函數(shù)計(jì)算幾何中給定點(diǎn)的解值。將該函數(shù)應(yīng)用于幾何,將輸出轉(zhuǎn)換為 Numpy,然后您可以驗(yàn)證結(jié)果。
psci.visu.save_vtk是一個(gè)快速可視化的輔助工具。它將圖形保存在 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、 這樣頂蓋驅(qū)動(dòng)型腔流訓(xùn)練就完成了

期間碰到過(guò)從第435個(gè)開(kāi)始None的問(wèn)題,新飛槳版本已解決該問(wèn)題。

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

四、實(shí)踐2、多孔介質(zhì)中的達(dá)西流

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

1、構(gòu)造幾何psci.geometry

首先,使用模塊接口定義問(wèn)題幾何。在此示例中,幾何圖形是一個(gè)矩形,其原點(diǎn)位于坐標(biāo) (0.0, 0.0),范圍設(shè)置為 (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))

接下來(lái),為幾何圖形添加邊界,這些邊界將在 PDE 中使用。請(qǐng)注意,該geo.add_boundary函數(shù)僅用于具有物理約束的邊界。

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)

準(zhǔn)備好域后,應(yīng)給出離散化方法。

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

2、構(gòu)建偏微分方程

定義幾何部分后,定義要求解的 PDE 方程。在本例中,方程是 2d Poisson。這個(gè)方程存在于包中,只需要?jiǎng)?chuàng)建一個(gè)psci.pde.Poisson對(duì)象來(lái)設(shè)置方程。

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

接下來(lái),為 PDE 添加邊界方程。PDE 中的邊界方程與幾何中的邊界定義密切相關(guān)。需要設(shè)置邊界上的物理信息,然后使用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)

一旦準(zhǔn)備好方程和問(wèn)題域,就應(yīng)該給出離散化方法。此配方將用于在訓(xùn)練開(kāi)始之前生成訓(xùn)練數(shù)據(jù)。

pde_disc = pde.discretize(geo_disc=geo_disc)

3、構(gòu)建神經(jīng)網(wǎng)絡(luò)

現(xiàn)在 PDE 部分幾乎完成了,我們繼續(xù)構(gòu)建神經(jīng)網(wǎng)絡(luò)。通過(guò)創(chuàng)建psci.network.FCNet對(duì)象來(lái)定義完全連接的網(wǎng)絡(luò)很簡(jiǎn)單。以下是我們?nèi)绾问褂秒p曲正切作為激活函數(shù)創(chuàng)建一個(gè)由 5 個(gè)隱藏層組成的 FFN,每個(gè)隱藏層有 20 個(gè)神經(jīng)元。

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

接下來(lái),最重要的步驟之一是定義損失函數(shù)。這里我們使用 L2 損失。

loss = psci.loss.L2()

通過(guò)設(shè)計(jì),該loss對(duì)象傳達(dá)了 PDE 的完整信息?,F(xiàn)在結(jié)合神經(jīng)網(wǎng)絡(luò)和損失,我們創(chuàng)建psci.algorithm.PINNs模型算法。

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

接下來(lái),通過(guò)插入 Adam 優(yōu)化器,構(gòu)建求解器,您就可以開(kāi)始訓(xùn)練了。在此示例中,使用了 Adam 優(yōu)化器,并給出了 0.001 的學(xué)習(xí)率。

該類將此處psci.solver.Solver調(diào)用的 PINNs 模型和優(yōu)化器捆綁到公開(kāi)接口 algo的求解器對(duì)象中。接受一個(gè)關(guān)鍵字參數(shù),num_epoch指定每個(gè)批次的 epoch 數(shù)。

100epoch用時(shí)3秒,10000估計(jì)用時(shí)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返回一個(gè)函數(shù),該函數(shù)計(jì)算幾何中給定點(diǎn)的解值。將該函數(shù)應(yīng)用于幾何,將輸出轉(zhuǎn)換為 Numpy,然后您可以驗(yàn)證結(jié)果。

psci.visu.save_vtk是一個(gè)快速可視化的輔助工具。它將圖形保存在 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)

五、實(shí)踐3、拉普拉斯方程

在 PaddleScience 中為簡(jiǎn)單的拉普拉斯方程構(gòu)建 PINN 模型。

若只需要訓(xùn)練.py文件,則可以省略上面所有的步驟,只需要完成下面三步即可:

  1. 安裝相關(guān)軟件包
    !pip install numpy scipy sympy matplotlib vtk pyevtk pandas wget visualdl

  2. 設(shè)置環(huán)境變量
    %env PYTHONPATH=/home/aistudio/PaddleScience

  3. 執(zhí)行訓(xùn)練程序
    !cd ~/PaddleScience/examples/laplace && python laplace2d.py

# cpu 運(yùn)行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

六、實(shí)踐4、3D繞柱

# 3d 繞柱 15分鐘1300epoch。 2000個(gè)epoch預(yù)計(jì)23分鐘 。
!cd ~/PaddleScience/examples/cylinder/3d_steady/ && python cylinder3d_steady.py
# 頂蓋驅(qū)動(dòng)型腔流 gpu 52分鐘
# !cd ~/PaddleScience/examples/ldc && python ldc2d_steady.py
# 多孔介質(zhì)中的達(dá)西流 gpu 6分38秒
# !cd ~/PaddleScience/examples/darcy/ && python darcy2d.py

七、問(wèn)題和技巧

如何打開(kāi)vtp文件

可以使用paraview打開(kāi)vtp文件。

這里也提供了一個(gè)readvtp.py文件,放在work目錄下。可以將這個(gè)文件和vtp文件都下載到本地,然后執(zhí)行python readvtp.py rslt_u.vtp即可打開(kāi)該文件,是3d的哦,可以用鼠標(biāo)旋轉(zhuǎn)看看。 本機(jī)需要安裝vtk庫(kù)(pip install vtk)。

新版本科學(xué)工具包的存盤文件為vtu,不能用下面的小程序打開(kāi)(打開(kāi)后看不到東西)。需要安裝下載paraview來(lái)打開(kāi)。

%%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()

八、調(diào)試糾錯(cuò)

報(bào)錯(cuò)cannot import name ‘jacobian’

import paddlescienc報(bào)錯(cuò):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)

估計(jì)應(yīng)該用最新版本才可以!
安裝最新develop版本,問(wèn)題解決!

沒(méi)有版本ModuleNotFoundError: No module named ‘paddlescience’

要在科學(xué)工具包的根目錄執(zhí)行 ,把文件直接放在科學(xué)工具包根目錄然后執(zhí)行。

后期是采用setup安裝科學(xué)工具包的方式來(lái)解決路徑依賴問(wèn)題。

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]

飛槳版本出錯(cuò),因?yàn)槭乔袚Q到gpu環(huán)境,安裝的時(shí)候選了cuda11版本的飛槳,安裝后報(bào)錯(cuò)。
選擇飛槳cuda10.1版本的,就ok了

后期是采用系統(tǒng)自帶的飛槳2.3正式版本,就沒(méi)有安裝的煩惱了。

執(zhí)行python ldc2d.py的時(shí)候報(bào)錯(cuò)

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'

原來(lái)是還有一個(gè)目錄沒(méi)有cp到當(dāng)前目錄,使用命令cp -r examples/ldc2d/openfoam . 即可。

后期是采用setup安裝科學(xué)工具包來(lái)解決路徑依賴問(wèn)題。

報(bào)錯(cuò)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'

原因是應(yīng)該是space_nsteps,命令為pdes, geo = psci.discretize(pdes, geo, space_steps=(101, 101)) ,文檔有誤。

新版本已經(jīng)解決該問(wèn)題。

報(bào)錯(cuò)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步報(bào)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

通過(guò)報(bào)issue得知,換新的飛槳開(kāi)發(fā)版就好了。

最終飛槳2.3正式版之后的都可以。

環(huán)境變量設(shè)置問(wèn)題

在AIStudio notebook下環(huán)境變量設(shè)置有些坑,比如命令行下使用export PYTHONPATH=$PYTHONPATH:/home/aistudio/PaddleScience/,然后就可以正常使用科學(xué)包了。而在notebook下,使用%env PYTHONPATH=$PYTHONPATH:/home/aistudio/PaddleScience/或者env PYTHONPATH=/home/aistudio/PaddleScience/都不能正常導(dǎo)入科學(xué)工具包,即import paddlescience會(huì)報(bào)錯(cuò)。

最終解決方法是寫setup.py文件,手動(dòng)安裝科學(xué)工具包。

報(bào)錯(cuò)hijack_call.c:658 cuInit error unknown error

!python laplace2d.py 報(bào)錯(cuò)
重啟,用飛槳2.3版本

報(bào)錯(cuò)No module named ‘sympy’

    import sympy
ModuleNotFoundError: No module named 'sympy'

解決方法:使用AIStudio經(jīng)典版。即不使用BML版本。

結(jié)束語(yǔ)

用飛槳,劃時(shí)代!讓我們蕩起雙槳,在AI的海洋乘風(fēng)破浪!

飛槳官網(wǎng):https://www.paddlepaddle.org.cn

因?yàn)樗接邢?#xff0c;難免有不足之處,還請(qǐng)大家多多幫助。

作者:段春華, 網(wǎng)名skywalk 或 天馬行空,濟(jì)寧市極快軟件科技有限公司的AI架構(gòu)師,百度飛槳PPDE。

我在AI Studio上獲得至尊等級(jí),點(diǎn)亮11個(gè)徽章,來(lái)關(guān)注啊~ https://aistudio.baidu.com/aistudio/personalcenter/thirdview/141218

http://www.risenshineclean.com/news/4142.html

相關(guān)文章:

  • 阿里外貿(mào)平臺(tái)網(wǎng)站建設(shè)總推薦榜總點(diǎn)擊榜總排行榜
  • 做網(wǎng)站公司沒(méi)簽合同有什么好的推廣平臺(tái)
  • 威海高區(qū)建設(shè)局網(wǎng)站電商平臺(tái)排名
  • 國(guó)內(nèi)有哪些b2c網(wǎng)站產(chǎn)品推廣方案ppt模板
  • sem seo是什么意思呢搜索引擎優(yōu)化技術(shù)
  • 網(wǎng)站備案網(wǎng)站類型萬(wàn)網(wǎng)是什么網(wǎng)站
  • 類似于微博網(wǎng)站怎么做的怎么營(yíng)銷自己的產(chǎn)品
  • 手機(jī)代理服務(wù)器免費(fèi)版seo 適合哪些行業(yè)
  • 拉薩做網(wǎng)站公司推廣賺錢的平臺(tái)有哪些
  • 章丘靈通環(huán)保設(shè)備在哪個(gè)網(wǎng)站上做的站長(zhǎng)查詢
  • 廣東南方通信建設(shè)有限公司官方網(wǎng)站免費(fèi)seo技術(shù)教程
  • 做影視網(wǎng)站 片源從哪里來(lái)電商seo是指
  • 建筑企業(yè)管理咨詢公司是做什么的品牌關(guān)鍵詞優(yōu)化
  • 做網(wǎng)站需要理解什么今天的特大新聞?dòng)心男?/a>
  • 一個(gè)企業(yè)網(wǎng)站ppt怎么做百家號(hào)seo
  • wordpress讀取相冊(cè)seo資源網(wǎng)站排名
  • 怎么對(duì)網(wǎng)站鏈接做拆解什么軟件可以找客戶資源
  • tp5企業(yè)網(wǎng)站開(kāi)發(fā)實(shí)例企業(yè)網(wǎng)站排名優(yōu)化價(jià)格
  • 微信開(kāi)放平臺(tái)客服人工整站快速排名優(yōu)化
  • 手機(jī)行業(yè)動(dòng)態(tài)網(wǎng)站制作最常見(jiàn)企業(yè)網(wǎng)站有哪些
  • 赤坎網(wǎng)站建設(shè)公司平臺(tái)營(yíng)銷策略都有哪些
  • wordpress自定義目錄優(yōu)化大師怎么樣
  • 網(wǎng)站開(kāi)發(fā)企業(yè)排名廈門人才網(wǎng)唯一官方網(wǎng)站
  • 旅游找什么網(wǎng)站好seo網(wǎng)絡(luò)營(yíng)銷外包
  • wordpress社區(qū)型主題網(wǎng)站seo軟件
  • 雙語(yǔ)網(wǎng)站建設(shè)報(bào)價(jià)濟(jì)南網(wǎng)絡(luò)seo公司
  • 廣州做網(wǎng)站平臺(tái)谷歌優(yōu)化的網(wǎng)絡(luò)公司
  • 做網(wǎng)站需要什么許可證推廣平臺(tái)哪個(gè)效果最好
  • 建一個(gè)大型網(wǎng)站需要多少錢網(wǎng)絡(luò)服務(wù)器價(jià)格
  • 接私活做預(yù)算的網(wǎng)站百度競(jìng)價(jià)推廣開(kāi)戶費(fèi)用