2
2
3
3
<a href =" https://aistudio.baidu.com/aistudio/projectdetail/6160749?contributionType=1&sUid=438690&shared=1&ts=1683961132625 " class =" md-button md-button--primary " style >AI Studio快速体验</a >
4
4
5
+ === "模型训练命令"
6
+ ``` sh
7
+ python ldc2d_unsteady_Re10.py
8
+ ```
9
+
5
10
## 1. 背景简介
6
11
7
12
顶盖方腔驱动流LDC问题在许多领域中都有应用。例如,这个问题可以用于计算流体力学(CFD)领域中验证计算方法的有效性。虽然这个问题的边界条件相对简单,但是其流动特性却非常复杂。在顶盖驱动流LDC中,顶壁朝x方向以U=1的速度移动,而其他三个壁则被定义为无滑移边界条件,即速度为零。
@@ -201,28 +206,24 @@ examples/ldc/ldc2d_unsteady_Re10.py:36:44
201
206
202
207
``` py linenums="46"
203
208
-- 8 < --
204
- examples/ ldc/ ldc2d_unsteady_Re10.py:46 :60
209
+ examples/ ldc/ ldc2d_unsteady_Re10.py:46 :58
205
210
-- 8 < --
206
211
```
207
212
208
213
#### 3.4.1 内部点约束
209
214
210
215
以作用在矩形内部点上的 ` InteriorConstraint ` 为例,代码如下:
211
216
212
- ``` py linenums="62 "
217
+ ``` py linenums="60 "
213
218
# set constraint
214
- pde_constraint = ppsci.constraint.InteriorConstraint(
219
+ pde = ppsci.constraint.InteriorConstraint(
215
220
equation[" NavierStokes" ].equations,
216
221
{" continuity" : 0 , " momentum_x" : 0 , " momentum_y" : 0 },
217
222
geom[" time_rect" ],
218
223
{** train_dataloader_cfg, " batch_size" : NPOINT_PDE * NTIME_PDE },
219
224
ppsci.loss.MSELoss(" sum" ),
220
225
evenly = True ,
221
- weight_dict = {
222
- " continuity" : 0.0001 , # (1)
223
- " momentum_x" : 0.0001 ,
224
- " momentum_y" : 0.0001 ,
225
- },
226
+ weight_dict = cfg.TRAIN .weight.pde, # (1)
226
227
name = " EQ" ,
227
228
)
228
229
```
@@ -257,57 +258,57 @@ pde_constraint = ppsci.constraint.InteriorConstraint(
257
258
258
259
由于 ` BoundaryConstraint ` 默认会在所有边界上进行采样,而我们需要对四个边界分别施加约束,因此需通过设置 ` criteria ` 参数,进一步细化出四个边界,如上边界就是符合 $y = 0.05$ 的边界点集
259
260
260
- ``` py linenums="77 "
261
+ ``` py linenums="71 "
261
262
-- 8 < --
262
- examples/ ldc/ ldc2d_unsteady_Re10.py:77 : 112
263
+ examples/ ldc/ ldc2d_unsteady_Re10.py:71 : 106
263
264
-- 8 < --
264
265
```
265
266
266
267
#### 3.4.3 初值约束
267
268
268
269
最后我们还需要对 $t=t_0$ 时刻的矩形内部点施加 N-S 方程约束,代码如下:
269
270
270
- ``` py linenums="113 "
271
+ ``` py linenums="107 "
271
272
-- 8 < --
272
- examples/ ldc/ ldc2d_unsteady_Re10.py:113 : 121
273
+ examples/ ldc/ ldc2d_unsteady_Re10.py:107 : 115
273
274
-- 8 < --
274
275
```
275
276
276
277
在微分方程约束、边界约束、初值约束构建完毕之后,以我们刚才的命名为关键字,封装到一个字典中,方便后续访问。
277
278
278
- ``` py linenums="122 "
279
+ ``` py linenums="116 "
279
280
-- 8 < --
280
- examples/ ldc/ ldc2d_unsteady_Re10.py:122 : 130
281
+ examples/ ldc/ ldc2d_unsteady_Re10.py:116 : 124
281
282
-- 8 < --
282
283
```
283
284
284
285
### 3.5 超参数设定
285
286
286
- 接下来我们需要指定训练轮数和学习率 ,此处我们按实验经验,使用两万轮训练轮数和带有 warmup 的 Cosine 余弦衰减学习率。
287
+ 接下来需要在配置文件中指定训练轮数 ,此处我们按实验经验,使用两万轮训练轮数和带有 warmup 的 Cosine 余弦衰减学习率。
287
288
288
- ``` py linenums="132 "
289
+ ``` py linenums="40 "
289
290
-- 8 < --
290
- examples/ ldc/ ldc2d_unsteady_Re10.py: 132 : 139
291
+ examples/ ldc/ conf / ldc2d_unsteady_Re10.yaml: 40 : 43
291
292
-- 8 < --
292
293
```
293
294
294
295
### 3.6 优化器构建
295
296
296
297
训练过程会调用优化器来更新模型参数,此处选择较为常用的 ` Adam ` 优化器。
297
298
298
- ``` py linenums="141 "
299
+ ``` py linenums="132 "
299
300
-- 8 < --
300
- examples/ ldc/ ldc2d_unsteady_Re10.py:141 : 142
301
+ examples/ ldc/ ldc2d_unsteady_Re10.py:132 : 133
301
302
-- 8 < --
302
303
```
303
304
304
305
### 3.7 评估器构建
305
306
306
307
在训练过程中通常会按一定轮数间隔,用验证集(测试集)评估当前模型的训练情况,因此使用 ` ppsci.validate.GeometryValidator ` 构建评估器。
307
308
308
- ``` py linenums="144 "
309
+ ``` py linenums="135 "
309
310
-- 8 < --
310
- examples/ ldc/ ldc2d_unsteady_Re10.py:144 : 162
311
+ examples/ ldc/ ldc2d_unsteady_Re10.py:135 : 153
311
312
-- 8 < --
312
313
```
313
314
@@ -329,19 +330,19 @@ examples/ldc/ldc2d_unsteady_Re10.py:144:162
329
330
330
331
本文中的输出数据是一个区域内的二维点集,每个时刻 $t$ 的坐标是 $(x^t_i,y^t_i)$,对应值是 $(u^t_i, v^t_i, p^t_i)$,因此我们只需要将评估的输出数据按时刻保存成 16 个 ** vtu格式** 文件,最后用可视化软件打开查看即可。代码如下:
331
332
332
- ``` py linenums="164 "
333
+ ``` py linenums="155 "
333
334
-- 8 < --
334
- examples/ ldc/ ldc2d_unsteady_Re10.py:164 : 195
335
+ examples/ ldc/ ldc2d_unsteady_Re10.py:155 : 186
335
336
-- 8 < --
336
337
```
337
338
338
339
### 3.9 模型训练、评估与可视化
339
340
340
341
完成上述设置之后,只需要将上述实例化的对象按顺序传递给 ` ppsci.solver.Solver ` ,然后启动训练、评估、可视化。
341
342
342
- ``` py linenums="197 "
343
+ ``` py linenums="188 "
343
344
-- 8 < --
344
- examples/ ldc/ ldc2d_unsteady_Re10.py:197 :
345
+ examples/ ldc/ ldc2d_unsteady_Re10.py:188 : 209
345
346
-- 8 < --
346
347
```
347
348
0 commit comments