@@ -110,19 +110,19 @@ $$Re \sim(100, 750)$$
110
110
111
111
首先展示代码中定义的各个参数变量,每个参数的具体含义会在下面使用到时进行解释。
112
112
113
- ``` py linenums="51" title="examples/cylinder/2d_unsteady/transformer_physx/train_enn_v2 .py"
113
+ ``` py linenums="51" title="examples/cylinder/2d_unsteady/transformer_physx/train_enn .py"
114
114
-- 8 < --
115
- examples/ cylinder/ 2d_unsteady / transformer_physx/ train_enn_v2 .py:51 :62
115
+ examples/ cylinder/ 2d_unsteady / transformer_physx/ train_enn .py:51 :62
116
116
-- 8 < --
117
117
```
118
118
119
119
#### 3.2.1 约束构建
120
120
121
121
本案例基于数据驱动的方法求解问题,因此需要使用 PaddleScience 内置的 ` SupervisedConstraint ` 构建监督约束。在定义约束之前,需要首先指定监督约束中用于数据加载的各个参数,代码如下:
122
122
123
- ``` py linenums="67" title="examples/cylinder/2d_unsteady/transformer_physx/train_enn_v2 .py"
123
+ ``` py linenums="67" title="examples/cylinder/2d_unsteady/transformer_physx/train_enn .py"
124
124
-- 8 < --
125
- examples/ cylinder/ 2d_unsteady / transformer_physx/ train_enn_v2 .py:67 :84
125
+ examples/ cylinder/ 2d_unsteady / transformer_physx/ train_enn .py:67 :84
126
126
-- 8 < --
127
127
```
128
128
@@ -141,9 +141,9 @@ examples/cylinder/2d_unsteady/transformer_physx/train_enn_v2.py:67:84
141
141
142
142
定义监督约束的代码如下:
143
143
144
- ``` py linenums="86" title="examples/cylinder/2d_unsteady/transformer_physx/train_enn_v2 .py"
144
+ ``` py linenums="86" title="examples/cylinder/2d_unsteady/transformer_physx/train_enn .py"
145
145
-- 8 < --
146
- examples/ cylinder/ 2d_unsteady / transformer_physx/ train_enn_v2 .py:86 :94
146
+ examples/ cylinder/ 2d_unsteady / transformer_physx/ train_enn .py:86 :94
147
147
-- 8 < --
148
148
```
149
149
@@ -166,37 +166,37 @@ examples/cylinder/2d_unsteady/transformer_physx/train_enn_v2.py:86:94
166
166
167
167
用 PaddleScience 代码表示如下:
168
168
169
- ``` py linenums="99" title="examples/cylinder/2d_unsteady/transformer_physx/train_enn_v2 .py"
169
+ ``` py linenums="99" title="examples/cylinder/2d_unsteady/transformer_physx/train_enn .py"
170
170
-- 8 < --
171
- examples/ cylinder/ 2d_unsteady / transformer_physx/ train_enn_v2 .py:99 :105
171
+ examples/ cylinder/ 2d_unsteady / transformer_physx/ train_enn .py:99 :105
172
172
-- 8 < --
173
173
```
174
174
175
175
其中,` CylinderEmbedding ` 的前两个参数在前文中已有描述,这里不再赘述,网络模型的第三、四个参数是训练数据集的均值和方差,用于归一化输入数据。计算均值、方差的的代码表示如下:
176
176
177
- ``` py linenums="28" title="examples/cylinder/2d_unsteady/transformer_physx/train_enn_v2 .py"
177
+ ``` py linenums="28" title="examples/cylinder/2d_unsteady/transformer_physx/train_enn .py"
178
178
-- 8 < --
179
- examples/ cylinder/ 2d_unsteady / transformer_physx/ train_enn_v2 .py:28 :45
179
+ examples/ cylinder/ 2d_unsteady / transformer_physx/ train_enn .py:28 :45
180
180
-- 8 < --
181
181
```
182
182
183
183
#### 3.2.3 学习率与优化器构建
184
184
185
185
本案例中使用的学习率方法为 ` ExponentialDecay ` ,学习率大小设置为0.001。优化器使用 ` Adam ` ,梯度裁剪使用了 Paddle 内置的 ` ClipGradByGlobalNorm ` 方法。用 PaddleScience 代码表示如下:
186
186
187
- ``` py linenums="107" title="examples/cylinder/2d_unsteady/transformer_physx/train_enn_v2 .py"
187
+ ``` py linenums="107" title="examples/cylinder/2d_unsteady/transformer_physx/train_enn .py"
188
188
-- 8 < --
189
- examples/ cylinder/ 2d_unsteady / transformer_physx/ train_enn_v2 .py:107 :121
189
+ examples/ cylinder/ 2d_unsteady / transformer_physx/ train_enn .py:107 :121
190
190
-- 8 < --
191
191
```
192
192
193
193
#### 3.2.4 评估器构建
194
194
195
195
本案例训练过程中会按照一定的训练轮数间隔,使用验证集评估当前模型的训练情况,需要使用 ` SupervisedValidator ` 构建评估器。代码如下:
196
196
197
- ``` py linenums="123" title="examples/cylinder/2d_unsteady/transformer_physx/train_enn_v2 .py"
197
+ ``` py linenums="123" title="examples/cylinder/2d_unsteady/transformer_physx/train_enn .py"
198
198
-- 8 < --
199
- examples/ cylinder/ 2d_unsteady / transformer_physx/ train_enn_v2 .py:123 :150
199
+ examples/ cylinder/ 2d_unsteady / transformer_physx/ train_enn .py:123 :150
200
200
-- 8 < --
201
201
```
202
202
@@ -206,39 +206,39 @@ examples/cylinder/2d_unsteady/transformer_physx/train_enn_v2.py:123:150
206
206
207
207
完成上述设置之后,只需要将上述实例化的对象按顺序传递给 ` ppsci.solver.Solver ` ,然后启动训练、评估。
208
208
209
- ``` py linenums="153" title="examples/cylinder/2d_unsteady/transformer_physx/train_enn_v2 .py"
209
+ ``` py linenums="153" title="examples/cylinder/2d_unsteady/transformer_physx/train_enn .py"
210
210
-- 8 < --
211
- examples/ cylinder/ 2d_unsteady / transformer_physx/ train_enn_v2 .py:153 :
211
+ examples/ cylinder/ 2d_unsteady / transformer_physx/ train_enn .py:153 :
212
212
-- 8 < --
213
213
```
214
214
215
215
### 3.3 Transformer 模型
216
216
217
217
上文介绍了如何构建 Embedding 模型的训练、评估,在本节中将介绍如何使用训练好的 Embedding 模型训练 Transformer 模型。因为训练 Transformer 模型的步骤与训练 Embedding 模型的步骤基本相似,因此本节在两者的重复部分的各个参数不再详细介绍。首先将代码中定义的各个参数变量展示如下,每个参数的具体含义会在下面使用到时进行解释。
218
218
219
- ``` py linenums="58" title="examples/cylinder/2d_unsteady/transformer_physx/train_transformer_v2 .py"
219
+ ``` py linenums="58" title="examples/cylinder/2d_unsteady/transformer_physx/train_transformer .py"
220
220
-- 8 < --
221
- examples/ cylinder/ 2d_unsteady / transformer_physx/ train_transformer_v2 .py:58 :74
221
+ examples/ cylinder/ 2d_unsteady / transformer_physx/ train_transformer .py:58 :74
222
222
-- 8 < --
223
223
```
224
224
225
225
#### 3.3.1 约束构建
226
226
227
227
Transformer 模型同样基于数据驱动的方法求解问题,因此需要使用 PaddleScience 内置的 ` SupervisedConstraint ` 构建监督约束。在定义约束之前,需要首先指定监督约束中用于数据加载的各个参数,代码如下:
228
228
229
- ``` py linenums="82" title="examples/cylinder/2d_unsteady/transformer_physx/train_transformer_v2 .py"
229
+ ``` py linenums="82" title="examples/cylinder/2d_unsteady/transformer_physx/train_transformer .py"
230
230
-- 8 < --
231
- examples/ cylinder/ 2d_unsteady / transformer_physx/ train_transformer_v2 .py:82 :99
231
+ examples/ cylinder/ 2d_unsteady / transformer_physx/ train_transformer .py:82 :99
232
232
-- 8 < --
233
233
```
234
234
235
235
数据加载的各个参数与 Embedding 模型中的基本一致,不再赘述。需要说明的是由于 Transformer 模型训练的输入数据是 Embedding 模型 Encoder 模块的输出数据,因此我们将训练好的 Embedding 模型作为 ` CylinderDataset ` 的一个参数,在初始化时首先将训练数据映射到编码空间。
236
236
237
237
定义监督约束的代码如下:
238
238
239
- ``` py linenums="101" title="examples/cylinder/2d_unsteady/transformer_physx/train_transformer_v2 .py"
239
+ ``` py linenums="101" title="examples/cylinder/2d_unsteady/transformer_physx/train_transformer .py"
240
240
-- 8 < --
241
- examples/ cylinder/ 2d_unsteady / transformer_physx/ train_transformer_v2 .py:101 :106
241
+ examples/ cylinder/ 2d_unsteady / transformer_physx/ train_transformer .py:101 :106
242
242
-- 8 < --
243
243
```
244
244
@@ -253,9 +253,9 @@ examples/cylinder/2d_unsteady/transformer_physx/train_transformer_v2.py:101:106
253
253
254
254
用 PaddleScience 代码表示如下:
255
255
256
- ``` py linenums="111" title="examples/cylinder/2d_unsteady/transformer_physx/train_transformer_v2 .py"
256
+ ``` py linenums="111" title="examples/cylinder/2d_unsteady/transformer_physx/train_transformer .py"
257
257
-- 8 < --
258
- examples/ cylinder/ 2d_unsteady / transformer_physx/ train_transformer_v2 .py:111 :119
258
+ examples/ cylinder/ 2d_unsteady / transformer_physx/ train_transformer .py:111 :119
259
259
-- 8 < --
260
260
```
261
261
@@ -265,19 +265,19 @@ examples/cylinder/2d_unsteady/transformer_physx/train_transformer_v2.py:111:119
265
265
266
266
本案例中使用的学习率方法为 ` CosineWarmRestarts ` ,学习率大小设置为0.001。优化器使用 ` Adam ` ,梯度裁剪使用了 Paddle 内置的 ` ClipGradByGlobalNorm ` 方法。用 PaddleScience 代码表示如下:
267
267
268
- ``` py linenums="121" title="examples/cylinder/2d_unsteady/transformer_physx/train_transformer_v2 .py"
268
+ ``` py linenums="121" title="examples/cylinder/2d_unsteady/transformer_physx/train_transformer .py"
269
269
-- 8 < --
270
- examples/ cylinder/ 2d_unsteady / transformer_physx/ train_transformer_v2 .py:121 :135
270
+ examples/ cylinder/ 2d_unsteady / transformer_physx/ train_transformer .py:121 :135
271
271
-- 8 < --
272
272
```
273
273
274
274
#### 3.3.4 评估器构建
275
275
276
276
训练过程中会按照一定的训练轮数间隔,使用验证集评估当前模型的训练情况,需要使用 ` SupervisedValidator ` 构建评估器。用 PaddleScience 代码表示如下:
277
277
278
- ``` py linenums="137" title="examples/cylinder/2d_unsteady/transformer_physx/train_transformer_v2 .py"
278
+ ``` py linenums="137" title="examples/cylinder/2d_unsteady/transformer_physx/train_transformer .py"
279
279
-- 8 < --
280
- examples/ cylinder/ 2d_unsteady / transformer_physx/ train_transformer_v2 .py:137 :163
280
+ examples/ cylinder/ 2d_unsteady / transformer_physx/ train_transformer .py:137 :163
281
281
-- 8 < --
282
282
```
283
283
@@ -287,25 +287,25 @@ examples/cylinder/2d_unsteady/transformer_physx/train_transformer_v2.py:137:163
287
287
288
288
在本文中首先定义了对 Transformer 模型输出数据变换到物理状态空间的代码:
289
289
290
- ``` py linenums="32" title="examples/cylinder/2d_unsteady/transformer_physx/train_transformer_v2 .py"
290
+ ``` py linenums="32" title="examples/cylinder/2d_unsteady/transformer_physx/train_transformer .py"
291
291
-- 8 < --
292
- examples/ cylinder/ 2d_unsteady / transformer_physx/ train_transformer_v2 .py:32 :52
292
+ examples/ cylinder/ 2d_unsteady / transformer_physx/ train_transformer .py:32 :52
293
293
-- 8 < --
294
294
```
295
295
296
- ``` py linenums="78" title="examples/cylinder/2d_unsteady/transformer_physx/train_transformer_v2 .py"
296
+ ``` py linenums="78" title="examples/cylinder/2d_unsteady/transformer_physx/train_transformer .py"
297
297
-- 8 < --
298
- examples/ cylinder/ 2d_unsteady / transformer_physx/ train_transformer_v2 .py:78 :79
298
+ examples/ cylinder/ 2d_unsteady / transformer_physx/ train_transformer .py:78 :79
299
299
-- 8 < --
300
300
```
301
301
302
302
可以看到,程序首先载入了训练好的 Embedding 模型,然后在 ` OutputTransform ` 的 ` __call__ ` 函数内实现了编码向量到物理状态空间的变换。
303
303
304
304
在定义好了以上代码之后,就可以实现可视化器代码的构建了:
305
305
306
- ``` py linenums="165" title="examples/cylinder/2d_unsteady/transformer_physx/train_transformer_v2 .py"
306
+ ``` py linenums="165" title="examples/cylinder/2d_unsteady/transformer_physx/train_transformer .py"
307
307
-- 8 < --
308
- examples/ cylinder/ 2d_unsteady / transformer_physx/ train_transformer_v2 .py:165 :193
308
+ examples/ cylinder/ 2d_unsteady / transformer_physx/ train_transformer .py:165 :193
309
309
-- 8 < --
310
310
```
311
311
@@ -315,23 +315,23 @@ examples/cylinder/2d_unsteady/transformer_physx/train_transformer_v2.py:165:193
315
315
316
316
完成上述设置之后,只需要将上述实例化的对象按顺序传递给 ` ppsci.solver.Solver ` ,然后启动训练、评估。
317
317
318
- ``` py linenums="193" title="examples/cylinder/2d_unsteady/transformer_physx/train_transformer_v2 .py"
318
+ ``` py linenums="193" title="examples/cylinder/2d_unsteady/transformer_physx/train_transformer .py"
319
319
-- 8 < --
320
- examples/ cylinder/ 2d_unsteady / transformer_physx/ train_transformer_v2 .py:193 :
320
+ examples/ cylinder/ 2d_unsteady / transformer_physx/ train_transformer .py:193 :
321
321
-- 8 < --
322
322
```
323
323
324
324
## 4. 完整代码
325
325
326
- ``` py linenums="1" title="examples/cylinder/2d_unsteady/transformer_physx/train_transformer_v2 .py"
326
+ ``` py linenums="1" title="examples/cylinder/2d_unsteady/transformer_physx/train_transformer .py"
327
327
-- 8 < --
328
- examples/ cylinder/ 2d_unsteady / transformer_physx/ train_transformer_v2 .py
328
+ examples/ cylinder/ 2d_unsteady / transformer_physx/ train_transformer .py
329
329
-- 8 < --
330
330
```
331
331
332
- ``` py linenums="1" title="examples/cylinder/2d_unsteady/transformer_physx/train_transformer_v2 .py"
332
+ ``` py linenums="1" title="examples/cylinder/2d_unsteady/transformer_physx/train_transformer .py"
333
333
-- 8 < --
334
- examples/ cylinder/ 2d_unsteady / transformer_physx/ train_transformer_v2 .py
334
+ examples/ cylinder/ 2d_unsteady / transformer_physx/ train_transformer .py
335
335
-- 8 < --
336
336
```
337
337
0 commit comments