73
73
74
74
上式中 $f$ 即为 MLP 模型本身,用 PaddleScience 代码表示如下
75
75
76
- ``` py linenums="34 "
76
+ ``` py linenums="102 "
77
77
-- 8 < --
78
- examples/ heat_pinn/ heat_pinn.py:34 : 35
78
+ examples/ heat_pinn/ heat_pinn.py:102 : 103
79
79
-- 8 < --
80
80
```
81
81
@@ -87,9 +87,9 @@ examples/heat_pinn/heat_pinn.py:34:35
87
87
88
88
由于二维热传导方程使用的是 Laplace 方程的 2 维形式,因此可以直接使用 PaddleScience 内置的 ` Laplace ` ,指定该类的参数 ` dim ` 为 2。
89
89
90
- ``` py linenums="37 "
90
+ ``` py linenums="105 "
91
91
-- 8 < --
92
- examples/ heat_pinn/ heat_pinn.py:37 : 38
92
+ examples/ heat_pinn/ heat_pinn.py:105 : 106
93
93
-- 8 < --
94
94
```
95
95
@@ -98,9 +98,9 @@ examples/heat_pinn/heat_pinn.py:37:38
98
98
本文中二维热传导问题作用在以 (-1.0, -1.0), (1.0, 1.0) 为对角线的二维矩形区域,
99
99
因此可以直接使用 PaddleScience 内置的空间几何 ` Rectangle ` 作为计算域。
100
100
101
- ``` py linenums="40 "
101
+ ``` py linenums="108 "
102
102
-- 8 < --
103
- examples/ heat_pinn/ heat_pinn.py:40 : 41
103
+ examples/ heat_pinn/ heat_pinn.py:108 : 109
104
104
-- 8 < --
105
105
```
106
106
@@ -110,19 +110,19 @@ examples/heat_pinn/heat_pinn.py:40:41
110
110
111
111
在定义约束之前,需要给每一种约束指定采样点个数,表示每一种约束在其对应计算域内采样数据的数量,以及通用的采样配置。
112
112
113
- ``` py linenums="49 "
113
+ ``` py linenums="117 "
114
114
-- 8 < --
115
- examples/ heat_pinn/ heat_pinn.py:49 : 54
115
+ examples/ heat_pinn/ heat_pinn.py:117 : 122
116
116
-- 8 < --
117
117
```
118
118
119
119
#### 3.4.1 内部点约束
120
120
121
121
以作用在内部点上的 ` InteriorConstraint ` 为例,代码如下:
122
122
123
- ``` py linenums="55 "
123
+ ``` py linenums="123 "
124
124
-- 8 < --
125
- examples/ heat_pinn/ heat_pinn.py:55 : 63
125
+ examples/ heat_pinn/ heat_pinn.py:123 : 131
126
126
-- 8 < --
127
127
```
128
128
@@ -146,9 +146,9 @@ examples/heat_pinn/heat_pinn.py:55:63
146
146
147
147
同理,我们还需要构建矩形的四个边界的约束。但与构建 ` InteriorConstraint ` 约束不同的是,由于作用区域是边界,因此我们使用 ` BoundaryConstraint ` 类,代码如下:
148
148
149
- ``` py linenums="64 "
149
+ ``` py linenums="132 "
150
150
-- 8 < --
151
- examples/ heat_pinn/ heat_pinn.py:64 : 103
151
+ examples/ heat_pinn/ heat_pinn.py:132 : 171
152
152
-- 8 < --
153
153
```
154
154
@@ -160,35 +160,29 @@ examples/heat_pinn/heat_pinn.py:64:103
160
160
161
161
在微分方程约束和边界约束构建完毕之后,以我们刚才的命名为关键字,封装到一个字典中,方便后续访问。
162
162
163
- ``` py linenums="104 "
163
+ ``` py linenums="172 "
164
164
-- 8 < --
165
- examples/ heat_pinn/ heat_pinn.py:104 : 111
165
+ examples/ heat_pinn/ heat_pinn.py:172 : 179
166
166
-- 8 < --
167
167
```
168
168
169
169
### 3.5 优化器构建
170
170
171
171
训练过程会调用优化器来更新模型参数,此处选择较为常用的 ` Adam ` 优化器,并设置学习率为 0.0005。
172
172
173
- ``` yaml linenums="36 "
173
+ ``` py linenums="181 "
174
174
-- 8 < --
175
- examples/heat_pinn/conf/heat_pinn.yaml:36:41
176
- --8<--
177
- ```
178
-
179
- ``` py linenums="113"
180
- -- 8 < --
181
- examples/ heat_pinn/ heat_pinn.py:113 :114
175
+ examples/ heat_pinn/ heat_pinn.py:181 :182
182
176
-- 8 < --
183
177
```
184
178
185
179
### 3.6 模型训练
186
180
187
181
完成上述设置之后,只需要将所有上述实例化的对象按顺序传递给 ` ppsci.solver.Solver ` ,然后启动训练。
188
182
189
- ``` py linenums="116 "
183
+ ``` py linenums="184 "
190
184
-- 8 < --
191
- examples/ heat_pinn/ heat_pinn.py:116 : 133
185
+ examples/ heat_pinn/ heat_pinn.py:184 : 201
192
186
-- 8 < --
193
187
```
194
188
@@ -197,9 +191,9 @@ examples/heat_pinn/heat_pinn.py:116:133
197
191
模型训练完成之后就需要进行与正式 FDM 方法计算出来的结果进行对比,这里我们使用了 ` geom["rect"].sample_interior ` 采样出测试所需要的坐标数据。
198
192
然后,再将采样出来的坐标数据输入到模型中,得到模型的预测结果,最后将预测结果与 FDM 结果进行对比,得到模型的误差。
199
193
200
- ``` py linenums="135 "
194
+ ``` py linenums="203 "
201
195
-- 8 < --
202
- examples/ heat_pinn/ heat_pinn.py:135 : 209
196
+ examples/ heat_pinn/ heat_pinn.py:203 : 212
203
197
-- 8 < --
204
198
```
205
199
0 commit comments