PaddleScience 模块介绍¶
PaddleScience 在代码结构上划分为 12 个模块。从一般深度学习工作流的角度来看,这 12 个模块分别负责构建输入数据、构建神经网络模型、构建损失函数、构建优化器,训练、评估、可视化等功能。从科学计算角度来看,部分模块承担了不同于 CV、NLP 任务的功能,比如用于物理机理驱动的 Equation 模块,定义方程公式和辅助高阶微分计算;用于涉及几何场景采样的 Geometry 模块,定义简单、复杂几何形状并在其内部、边界采样构造数据;Constraint 模块将不同的优化目标视为一种“约束”,使得套件能用一套训练代码统一物理机理驱动、数据驱动、数理融合三种不同的求解流程。
1. 整体工作流¶
上图是 PaddleScience 的 workflow 示意图(以基于几何的问题求解为例),流程描述如下
- Geometry 负责构建几何并在几何上采样,完成数据构建;
- 用 Model 模块接受输入,得到模型输出;
- 科学计算任务具有特殊性,模型输出往往并不是前向计算的终点,还需要进一步按照 Equation,计算出方程公式所需的变量;
- 计算损失函数,并利用框架的自动微分机制,求出所有参数的梯度;
- 上述的优化目标可以施加在几何的不同区域上,比如interior、boundary区域,因此上图中的 Constraint 可以有多个;
- 将所有 Constraint 贡献的梯度累加,并用于更新模型参数;
- 训练过程中如果开启了评估和可视化功能,则会按一定频率自动对当前模型进行评估和预测结果可视化;
- Solver 是整个套件运行的全局调度模块,负责将上述过程按用户指定的轮数和频率重复运行。
2. 模块简介¶
2.1 Arch¶
Arch 模块负责各种神经网络模型的组网、参数初始化、前向计算等功能,内置了多种模型供用户使用。
2.2 AutoDiff¶
AutoDiff 模块负责计算高阶微分功能,内置基于 Paddle 自动微分机制的全局单例 jacobian
、hessian
供用户使用。
2.3 Constraint¶
为了在套件中统一物理信息驱动、数据驱动、数理融合三种求解方式,我们将数据构造、输入到输出的计算过程、损失函数等必要接口在其定义完毕之后,统一记录在 Constraint 这一模块中,有了这些接口,Constraint 就能表示不同的训练目标,如:
InteriorConstraint
定义了在给定的几何区域内部,按照给定输入到输出的计算过程,利用损失函数优化模型参数,使得模型输出满足给定的条件;BoundaryConstraint
定义了在给定的几何区域边界上,按照给定输入到输出的计算过程,利用损失函数优化模型参数,使得模型输出满足给定的条件;SupervisedConstraint
定义了在给定的监督数据(相当于CV、NLP中的监督训练)上,按照给定输入到输出的计算过程,利用损失函数优化模型参数,使得模型输出满足给定的条件。- ...
这一模块有两个主要作用,一是在代码流程上统一了物理信息驱动、数据驱动两个不同的优化范式(前者类似监督训练方式,后者类似无监督训练方式),二是使得套件能应用在数理融合的场景中,只需分别构造不同的 Constraint 并让它们共同参与训练即可。
2.4 Data¶
Data 模块负责数据的读取、包装和预处理,如下所示。
子模块名称 | 子模块功能 |
---|---|
ppsci.data.dataset | 数据集相关 |
ppsci.data.transform | 单个数据样本预处理相关方法 |
ppsci.data.batch_transform | 批数据预处理相关方法 |
2.5 Equation¶
Equation 模块负责定义各种常见方程的计算函数,如 NavierStokes
表示 N-S 方程,Vibration
表示振动方程,每个方程内部含有相关变量的计算函数。
2.6 Geometry¶
Geometry 模块负责定义各种常见的几何形状,如 Interval
线段几何、Rectangle
矩形几何、Sphere
球面几何。
2.7 Loss¶
Loss 模块包含 ppsci.loss.loss
与 ppsci.loss.mtl
两个子模块,如下所示。
子模块名称 | 子模块功能 |
---|---|
ppsci.loss.loss | 损失函数相关 |
ppsci.loss.mtl | 多目标优化相关 |
2.8 Optimizer¶
Optimizer 模块包含 ppsci.optimizer.optimizer
与 ppsci.optimizer.lr_scheduler
两个子模块,如下所示。
子模块名称 | 子模块功能 |
---|---|
ppsci.utils.optimizer | 优化器相关 |
ppsci.utils.lr_scheduler | 学习率调节器相关 |
2.9 Solver¶
Solver 模块负责定义求解器,作为训练、评估、推理、可视化的启动和管理引擎。
2.10 Utils¶
Utils 模块内部存放了一些适用于多种场景下的工具类、函数,例如在 reader.py
下的数据读取函数,在 logger.py
下的日志打印函数,以及在 expression.py
下的方程计算类。
根据其功能细分为以下 8 个子模块
子模块名称 | 子模块功能 |
---|---|
ppsci.utils.checker | ppsci 安装功能检查相关 |
ppsci.utils.expression | 负责训练、评估、可视化过程中涉及模型、方程的前向计算 |
ppsci.utils.initializer | 常用参数初始化方法 |
ppsci.utils.logger | 日志打印模块 |
ppsci.utils.misc | 存放通用函数 |
ppsci.utils.reader | 文件读取模块 |
ppsci.utils.writer | 文件写入模块 |
ppsci.utils.save_load | 模型参数保存与加载 |
ppsci.utils.symbolic | sympy 符号计算功能相关 |
2.11 Validate¶
Validator 模块负责定义各种评估器,用于在指定数据上进行评估(可选,默认不开启训练时评估),并得到评估指标。
2.12 Visualize¶
Visualizer 模块负责定义各种可视化器,用于模型评估完后在指定数据上进行预测(可选,默认不开启训练时可视化)并将结果保存成可视化的文件。