60
60
61
61
上式中 $f$ 即为 MLP 模型本身,用 PaddleScience 代码表示如下
62
62
63
- ``` py linenums="32 "
63
+ ``` py linenums="23 "
64
64
-- 8 < --
65
- examples/ laplace/ laplace2d.py:32 : 33
65
+ examples/ laplace/ laplace2d.py:23 : 24
66
66
-- 8 < --
67
67
```
68
68
@@ -74,9 +74,9 @@ examples/laplace/laplace2d.py:32:33
74
74
75
75
由于 2D-Laplace 使用的是 Laplace 方程的2维形式,因此可以直接使用 PaddleScience 内置的 ` Laplace ` ,指定该类的参数 ` dim ` 为2。
76
76
77
- ``` py linenums="35 "
77
+ ``` py linenums="26 "
78
78
-- 8 < --
79
- examples/ laplace/ laplace2d.py:35 : 36
79
+ examples/ laplace/ laplace2d.py:26 : 27
80
80
-- 8 < --
81
81
```
82
82
@@ -85,9 +85,9 @@ examples/laplace/laplace2d.py:35:36
85
85
本文中 2D Laplace 问题作用在以 (0.0, 0.0), (1.0, 1.0) 为对角线的二维矩形区域,
86
86
因此可以直接使用 PaddleScience 内置的空间几何 ` Rectangle ` 作为计算域。
87
87
88
- ``` py linenums="38 "
88
+ ``` py linenums="29 "
89
89
-- 8 < --
90
- examples/ laplace/ laplace2d.py:38 : 43
90
+ examples/ laplace/ laplace2d.py:29 : 34
91
91
-- 8 < --
92
92
```
93
93
@@ -97,19 +97,19 @@ examples/laplace/laplace2d.py:38:43
97
97
98
98
在定义约束之前,需要给每一种约束指定采样点个数,表示每一种约束在其对应计算域内采样数据的数量,以及通用的采样配置。
99
99
100
- ``` yaml linenums="26 "
100
+ ``` yaml linenums="30 "
101
101
--8<--
102
- examples/laplace/conf/laplace2d.yaml:26:27
102
+ examples/laplace/conf/laplace2d.yaml:30:31
103
103
--8<--
104
104
```
105
105
106
106
#### 3.4.1 内部点约束
107
107
108
108
以作用在内部点上的 ` InteriorConstraint ` 为例,代码如下:
109
109
110
- ``` py linenums="60 "
110
+ ``` py linenums="50 "
111
111
-- 8 < --
112
- examples/ laplace/ laplace2d.py:60 : 68
112
+ examples/ laplace/ laplace2d.py:50 : 59
113
113
-- 8 < --
114
114
```
115
115
@@ -131,19 +131,19 @@ examples/laplace/laplace2d.py:60:68
131
131
132
132
同理,我们还需要构建矩形的四个边界的约束。但与构建 ` InteriorConstraint ` 约束不同的是,由于作用区域是边界,因此我们使用 ` BoundaryConstraint ` 类,代码如下:
133
133
134
- ``` py linenums="69 "
134
+ ``` py linenums="60 "
135
135
-- 8 < --
136
- examples/ laplace/ laplace2d.py:69 : 76
136
+ examples/ laplace/ laplace2d.py:60 : 72
137
137
-- 8 < --
138
138
```
139
139
140
140
` BoundaryConstraint ` 类第一个参数表示我们直接对网络模型的输出结果 ` out["u"] ` 作为程序运行时的约束对象;
141
141
142
142
第二个参数是指我们约束对象的真值如何获得,这里我们直接通过其解析解进行计算,定义解析解的代码如下:
143
143
144
- ``` py linenums="45 "
144
+ ``` py linenums="36 "
145
145
-- 8 < --
146
- examples/ laplace/ laplace2d.py:45 : 49
146
+ examples/ laplace/ laplace2d.py:36 : 40
147
147
-- 8 < --
148
148
```
149
149
@@ -153,29 +153,29 @@ examples/laplace/laplace2d.py:45:49
153
153
154
154
接下来我们需要在配置文件中指定训练轮数,此处我们按实验经验,使用两万轮训练轮数,评估间隔为两百轮。
155
155
156
- ``` yaml linenums="41 "
156
+ ``` yaml linenums="45 "
157
157
--8<--
158
- examples/laplace/conf/laplace2d.yaml:41:46
158
+ examples/laplace/conf/laplace2d.yaml:45:50
159
159
--8<--
160
160
```
161
161
162
162
### 3.6 优化器构建
163
163
164
164
训练过程会调用优化器来更新模型参数,此处选择较为常用的 ` Adam ` 优化器。
165
165
166
- ``` py linenums="83 "
166
+ ``` py linenums="74 "
167
167
-- 8 < --
168
- examples/ laplace/ laplace2d.py:83 : 84
168
+ examples/ laplace/ laplace2d.py:74 : 75
169
169
-- 8 < --
170
170
```
171
171
172
172
### 3.7 评估器构建
173
173
174
174
在训练过程中通常会按一定轮数间隔,用验证集(测试集)评估当前模型的训练情况,因此使用 ` ppsci.validate.GeometryValidator ` 构建评估器。
175
175
176
- ``` py linenums="86 "
176
+ ``` py linenums="77 "
177
177
-- 8 < --
178
- examples/ laplace/ laplace2d.py:86 : 100
178
+ examples/ laplace/ laplace2d.py:77 : 92
179
179
-- 8 < --
180
180
```
181
181
@@ -185,19 +185,19 @@ examples/laplace/laplace2d.py:86:100
185
185
186
186
本文中的输出数据是一个区域内的二维点集,因此我们只需要将评估的输出数据保存成 ** vtu格式** 文件,最后用可视化软件打开查看即可。代码如下:
187
187
188
- ``` py linenums="103 "
188
+ ``` py linenums="94 "
189
189
-- 8 < --
190
- examples/ laplace/ laplace2d.py:103 : 112
190
+ examples/ laplace/ laplace2d.py:94 : 103
191
191
-- 8 < --
192
192
```
193
193
194
194
### 3.9 模型训练、评估与可视化
195
195
196
196
完成上述设置之后,只需要将上述实例化的对象按顺序传递给 ` ppsci.solver.Solver ` ,然后启动训练、评估、可视化。
197
197
198
- ``` py linenums="114 "
198
+ ``` py linenums="105 "
199
199
-- 8 < --
200
- examples/ laplace/ laplace2d.py:114 : 134
200
+ examples/ laplace/ laplace2d.py:105 : 125
201
201
-- 8 < --
202
202
```
203
203
0 commit comments