Skip to content

Commit

Permalink
[Doc] Update CGCNN docs and add CIKM competition (#980)
Browse files Browse the repository at this point in the history
* update arch.md & dataset.md

* update moflow code

* upate cgcnn related code and docs

* update CIKM 2024
  • Loading branch information
HydrogenSulfate authored Aug 22, 2024
1 parent 621e301 commit 12a3f26
Show file tree
Hide file tree
Showing 12 changed files with 147 additions and 118 deletions.
2 changes: 2 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,8 @@

[**PaddleScience使用文档**](https://paddlescience-docs.readthedocs.io/zh-cn/latest/)

🔥 [CIKM 2024: AI辅助的先进空气动力学-优化汽车设计以实现最佳性能](https://competition.atomgit.com/competitionInfo?id=cda4e961b0c25858ca0fd2a4bdf87520),火热报名中。

🔥 [IJCAI 2024: 任意三维几何外形车辆的风阻快速预测竞赛](https://competition.atomgit.com/competitionInfo?id=7f3f276465e9e845fd3a811d2d6925b5),track A, B, C 代码:

- [paddle实现](./jointContribution/IJCAI_2024/README.md)
Expand Down
2 changes: 2 additions & 0 deletions docs/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@
./README.md:status
--8<--

🔥 [CIKM 2024: AI辅助的先进空气动力学-优化汽车设计以实现最佳性能](https://competition.atomgit.com/competitionInfo?id=cda4e961b0c25858ca0fd2a4bdf87520),火热报名中。

🔥 [IJCAI 2024: 任意三维几何外形车辆的风阻快速预测竞赛](https://competition.atomgit.com/competitionInfo?id=7f3f276465e9e845fd3a811d2d6925b5),track A, B, C 代码:

- [paddle实现](https://github.com/PaddlePaddle/PaddleScience/tree/develop/jointContribution/IJCAI_2024)
Expand Down
1 change: 1 addition & 0 deletions docs/zh/api/arch.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
- Arch
- AutoEncoder
- ChipDeepONets
- CrystalGraphConvNet
- CuboidTransformer
- CVit1D
- CylinderEmbedding
Expand Down
3 changes: 3 additions & 0 deletions docs/zh/api/data/dataset.md
Original file line number Diff line number Diff line change
Expand Up @@ -28,4 +28,7 @@
- DGMRDataset
- DarcyFlowDataset
- SphericalSWEDataset
- SEVIRDataset
- MOlFLOWDataset
- CGCNNDataset
show_root_heading: true
72 changes: 38 additions & 34 deletions docs/zh/examples/cgcnn.md
Original file line number Diff line number Diff line change
@@ -1,12 +1,11 @@
# CGCNN (Crystal Graph Convolutional Neural Networks for an Accurate and Interpretable Prediction of Material Properties)

开始训练、评估前,请先下载[数据集](https://cmr.fysik.dtu.dk/c2db/c2db.html)并进行划分。数据读取需要额外安装依赖`pymatgen`,请额外运行命令`pip install pymatgen`
开始训练、评估前,请先下载[数据集](https://cmr.fysik.dtu.dk/c2db/c2db.html)并进行划分。数据读取需要额外安装依赖 `pymatgen`,请运行安装命令 `pip install pymatgen`

| 预训练模型 | 指标 |
|:--| :--|
| [cgcnn_pretrained.pdparams](https://paddle-org.bj.bcebos.com/paddlescience/models/CGCNN/cgcnn_pretrained.pdparams) | loss(MAE): 0.4195 |


=== "模型训练命令"

``` sh
Expand All @@ -18,7 +17,6 @@
python CGCNN.py mode=eval EVAL.pretrained_model_path="https://paddle-org.bj.bcebos.com/paddlescience/models/CGCNN/cgcnn_pretrained.pdparams" TEST_DIR="Your test dataset path"
```


## 1. 背景简介

机器学习方法在加速新材料设计方面变得越来越流行,其预测材料性质的精度接近于从头计算,但计算速度要快几个数量级。晶体系统的任意尺寸带来了挑战,因为它们需要表示为固定长度的向量,以便与大多数算法兼容。这个问题通常是通过使用简单的材料属性手动构造固定长度的特征向量或设计原子坐标的对称不变变换来解决的。然而,前者需要逐个设计来预测不同的性质,而后者由于复杂的变换使得模型难以解释。CGCNN是一个广义的晶体图卷积神经网络框架框架,用于表示周期性晶体系统,它既提供了具有密度泛函理论(DFT)精度的材料性质预测,又提供了原子水平的化学见解。因此本案例使用CGNN对二维半导体材料的能带性质进行预测。
Expand All @@ -33,7 +31,6 @@

![CGCNN_overview](https://paddle-org.bj.bcebos.com/paddlescience/docs/CGCNN/CGCNN.png)


CGCNN 论文中预测了七种不同性质,接下来将介绍如何使用 PaddleScience 代码实现 CGCNN 网络预测二维半导体间隙性质

### 3.1 数据集介绍
Expand All @@ -53,7 +50,7 @@ CGCNN 原文中使用的是 数据集 (<https://next-gen.materialsproject.org/>)

`root_dir`的结构应该是(`root_dir`泛指训练/评估/测试数据文件夹):

```
``` log
root_dir
├── id_prop.csv
├── atom_init.json
Expand All @@ -64,79 +61,86 @@ root_dir

### 3.2 模型构建

CGCNN 需要通过所使用的数据进行模型构造,因此需要先实例化`CGCNNDataset` 。在实例化`CGCNNDataset`后可以得到训练样本的长度和输入维度等信息,根据此信息和设定的模型超参数`cfg.MODEL.atom_fea_len``cfg.MODEL.n_conv``cfg.MODEL.h_fea_len``cfg.MODEL.n_h`完成`CrystalGraphConvNet`的实例化。
CGCNN 需要通过所使用的数据进行模型构造,因此需要先实例化`CGCNNDataset`。在实例化`CGCNNDataset`后可以得到训练样本的长度和输入维度等信息,根据此信息和设定的模型超参数`cfg.MODEL.atom_fea_len``cfg.MODEL.n_conv``cfg.MODEL.h_fea_len``cfg.MODEL.n_h`完成`CrystalGraphConvNet`的实例化。

``` py linenums="68" title="PaddleScience/examples/cgcnn/CGCNN.py"
``` py linenums="18" title="examples/cgcnn/CGCNN.py"
--8<--
examples/cgcnn/CGCNN.py:68:78
examples/cgcnn/CGCNN.py:18:32
--8<--
```

其中超参数`cfg.MODEL.atom_fea_len``cfg.MODEL.n_conv``cfg.MODEL.h_fea_len``cfg.MODEL.n_h`默认设定如下:

``` yaml linenums="35" title="PaddleScience/examples/cgcnn/conf/CGCNN_Demo.yaml"
``` yaml linenums="36" title="examples/cgcnn/conf/CGCNN.yaml"
--8<--
examples/cgcnn/conf/CGCNN_Demo.yaml:35:40
examples/cgcnn/conf/CGCNN.yaml:36:41
--8<--
```

### 3.3 优化器构建
### 3.3 约束构建

训练时使用`SGD`优化器进行训练,相关代码如下:
``` py linenums="118" title="PaddleScience/examples/cgcnn/CGCNN.py"
本问题模型为回归模型,采用监督学习方式进行训练,因此可以使用PaddleScience内置监督约束`SupervisedConstraint`构建监督约束。代码如下:

``` py linenums="34" title="examples/cgcnn/CGCNN.py"
--8<--
examples/cgcnn/CGCNN.py:118:122
examples/cgcnn/CGCNN.py:34:51
--8<--
```

训练超参数`cfg.TRAIN.lr``cfg.TRAIN.momentum``cfg.TRAIN.weight_decay`等默认设定如下:
``` yaml linenums="42" title="PaddleScience/examples/cgcnn/conf/CGCNN_Demo.yaml"
其中`root_dir`为训练集路径,`batch_size`为批训练大小。为了能够正常的批次训练,`collate_fn`需要根据模型进行重新设计。`collate_pool`代码如下:

``` py linenums="33" title="ppsci/data/dataset/cgcnn_dataset.py"
--8<--
examples/cgcnn/conf/CGCNN_Demo.yaml:42:52
ppsci/data/dataset/cgcnn_dataset.py:33:97
--8<--
```

### 3.4 约束构建
### 3.4 评估器构建

本问题模型为回归模型,采用监督学习方式进行训练,因此可以使用PaddleScience内置监督约束`SupervisedConstraint`构建监督约束。代码如下
为了实时监测模型的训练情况,我们将在每轮训练后对上一轮训练完毕的模型进行评估。与训练过程保持一致,我们使用PaddleScience内置的`SupervisedValidator`函数构建监督数据评估器。具体代码如下

``` py linenums="80" title="PaddleScience/examples/cgcnn/CGCNN.py"
``` py linenums="53" title="examples/cgcnn/CGCNN.py"
--8<--
examples/cgcnn/CGCNN.py:80:97
examples/cgcnn/CGCNN.py:53:70
--8<--
```

其中`root_dir`为训练集路径,`batch_size`为批训练大小。为了能够正常的批次训练,`collate_fn`需要根据模型进行重新设计。`collate_pool`代码如下:
### 3.5 优化器构建

训练时使用`SGD`优化器进行训练,相关代码如下:

``` py linenums="19" title="PaddleScience/ppsci/data/dataset/cgcnn_dataset.py"
``` py linenums="72" title="examples/cgcnn/CGCNN.py"
--8<--
/ppsci/data/dataset/cgcnn_dataset.py:19:86
examples/cgcnn/CGCNN.py:72:76
--8<--
```

### 3.5 评估器构建

为了实时监测模型的训练情况,我们将在每轮训练后对上一轮训练完毕的模型进行评估。与训练过程保持一致,我们使用PaddleScience内置的`SupervisedValidator`函数构建监督数据评估器。具体代码如下:
训练超参数`cfg.TRAIN.lr``cfg.TRAIN.momentum``cfg.TRAIN.weight_decay`等默认设定如下:

``` py linenums="99" title="PaddleScience/examples/cgcnn/CGCNN.py"
``` yaml linenums="49" title="examples/cgcnn/conf/CGCNN.yaml"
--8<--
examples/cgcnn/CGCNN.py:99:116
examples/cgcnn/conf/CGCNN.yaml:49:51
--8<--
```

### 3.6 模型训练

由于本问题被建模为回归问题,因此可以使用PaddleScience内置的`psci.loss.MAELoss('mean')`作为训练过程的损失函数。同时选择使用随机梯度下降法对网络进行优化。并且将训练过程封装至PaddleScience内置的`Solver`中,具体代码如下:
``` py linenums="124" title="PaddleScience/examples/cgcnn/CGCNN.py"

``` py linenums="78" title="examples/cgcnn/CGCNN.py"
--8<--
examples/cgcnn/CGCNN.py:124:134
examples/cgcnn/CGCNN.py:78:86
--8<--
```


## 4. 完整代码

``` py linenums="1" title="PaddleScience/examples/cgcnn/CGCNN.py"
``` py linenums="1" title="examples/cgcnn/CGCNN.py"
--8<--
examples/cgcnn/CGCNN.py:1:152
examples/cgcnn/CGCNN.py
--8<--
```

## 5. 参考资料

- [Crystal Graph Convolutional Neural Networks for an Accurate and Interpretable Prediction of Material Properties](https://journals.aps.org/prl/abstract/10.1103/PhysRevLett.120.145301)
36 changes: 18 additions & 18 deletions docs/zh/examples/moflow.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,10 +14,10 @@

``` sh
# qm9 数据集模型训练
python train_moflow.py data_name=qm9
python moflow_train.py data_name=qm9

# zinc250k 数据集模型训练
python train_moflow.py data_name=zinc250k
python moflow_train.py data_name=zinc250k
```

=== "模型推理评估命令"
Expand Down Expand Up @@ -233,37 +233,37 @@ ppsci/data/dataset/moflow_dataset.py:394:427

本案例基于数据从中学习化学键约束的方法求解问题,因此按照 PaddleScience 的API结构说明,采用内置的 SupervisedConstraint 构建监督约束。在定义约束之前,需要首先指定监督约束中用于数据加载的各个参数。

``` py linenums="140" title="examples/moflow/train_moflow.py"
``` py linenums="140" title="examples/moflow/moflow_train.py"
--8<--
examples/moflow/train_moflow.py:140:161
examples/moflow/moflow_train.py:140:161
--8<--
```

其中,"dataset" 字段定义了使用的 `Dataset` 类名为 `MOlFLOWDataset`,"sampler" 字段定义了使用的 `Sampler` 类名为 `BatchSampler`,设置的 `batch_size` 为 256,`num_works` 为 8。

定义监督约束的代码如下:

``` py linenums="167" title="examples/moflow/train_moflow.py"
``` py linenums="167" title="examples/moflow/moflow_train.py"
--8<--
examples/moflow/train_moflow.py:167:177
examples/moflow/moflow_train.py:167:177
--8<--
```

### 3.3 模型构建

在该案例中,药物分子预测生成模型基于 MoFlowNet 网络模型实现,结合 PaddleScience 代码标准格式,对于模型进行分装,单独对flow,grow等模模型进行调用,其中模型构成的代码表示如下:

``` py linenums="162" title="examples/moflow/train_moflow.py"
``` py linenums="162" title="examples/moflow/moflow_train.py"
--8<--
examples/moflow/train_moflow.py:162:166
examples/moflow/moflow_train.py:162:166
--8<--
```

模型网络参数配置如下:

``` py linenums="97" title="examples/moflow/train_moflow.py"
``` py linenums="97" title="examples/moflow/moflow_train.py"
--8<--
examples/moflow/train_moflow.py:97:128
examples/moflow/moflow_train.py:97:128
--8<--
```

Expand All @@ -281,19 +281,19 @@ examples/moflow/conf/moflow_train.yaml:22:79

本案例中使用的学习率大小设置为 `0.001`。优化器使用 `Adam`,用 PaddleScience 代码表示如下:

``` py linenums="181" title="examples/moflow/train_moflow.py"
``` py linenums="181" title="examples/moflow/moflow_train.py"
--8<--
examples/moflow/train_moflow.py:181:183
examples/moflow/moflow_train.py:181:183
--8<--
```

### 3.5 评估器构建

本案例训练过程中会按照一定的训练轮数间隔,使用验证集评估当前模型的训练情况,需要使用 `SupervisedValidator` 构建评估器。代码如下:

``` py linenums="184" title="examples/moflow/train_moflow.py"
``` py linenums="184" title="examples/moflow/moflow_train.py"
--8<--
examples/moflow/train_moflow.py:184:213
examples/moflow/moflow_train.py:184:213
--8<--
```

Expand All @@ -303,9 +303,9 @@ examples/moflow/train_moflow.py:184:213

完成上述设置之后,只需要将上述实例化的对象按顺序传递给 ppsci.solver.Solver,然后启动训练、评估

``` py linenums="214" title="examples/moflow/train_moflow.py"
``` py linenums="214" title="examples/moflow/moflow_train.py"
--8<--
examples/moflow/train_moflow.py:214:236
examples/moflow/moflow_train.py:214:236
--8<--
```

Expand Down Expand Up @@ -349,9 +349,9 @@ examples/moflow/conf/moflow_optimize.yaml:94:107

## 4. 训练完整代码

``` py linenums="1" title="examples/moflow/train_moflow.py"
``` py linenums="1" title="examples/moflow/moflow_train.py"
--8<--
examples/moflow/train_moflow.py
examples/moflow/moflow_train.py
--8<--
```

Expand Down
Loading

0 comments on commit 12a3f26

Please sign in to comment.