目录

mcoNGN

misaraty 更新 | 2026-10-06
前言
下载:mcoNGN。

简介

mcoNGN_v1.py 是一个基于 PyTorch 和 PyTorch Geometric 的晶体性质回归程序,可直接读取 CIF 晶体结构。代码默认预测带隙(单位 eV),并在同一个 Python 文件中实现了 coGN 与 coNGN 两个模型。

目标名称、单位、数据路径、构图参数、网络规模、训练参数、绘图风格以及可选的 Optuna 超参数搜索,都可以在文件顶部的参数区修改。

两个模型

参数或功能 coGN coNGN
MODEL_NAME "coGN" "coNGN"
晶体图 自适应周期性 24 近邻图 自适应周期性 Voronoi 图
边特征 原子间距离 RBF 距离 RBF + Voronoi 棱面面积 RBF
消息传递 连通性优化图网络模块 连通性优化模块 + 嵌套线图更新
角度信息 不使用 在线图上使用键角 RBF
默认隐藏维度 128 160
默认输出层 线性层 两层非线性 MLP

两个模型均使用可学习的原子嵌入与固定元素描述符、5 个消息传递模块、全局平均池化以及标量回归输出。

环境要求

建议使用 Python 3.10 或更高版本。先根据本机 CPU/CUDA 环境安装合适版本的 PyTorch,再安装其余依赖:

1
pip install torch torch-geometric pymatgen numpy pandas openpyxl scikit-learn matplotlib tqdm

只有将 USE_OPTUNA 设为 True 时才需要安装 Optuna:

1
pip install optuna

数据准备

将 data.xlsx、代码文件和 cif 文件夹放在同一工作目录:

1
2
3
4
5
6
7
.
├── mcoNGN_v1.py
├── data.xlsx
└── cif
    ├── 1.cif
    ├── 2.cif
    └── ...

程序只读取 data.xlsx 的前两列。第一列必须是整数形式的 CIF 编号,例如编号 1 对应 ./cif/1.cif;第二列是回归目标值。

CIF编号 bandgap
1 1.237
2 2.104
… …

程序会跳过目标值无效、CIF 缺失或无法读取、不能生成有效图的样本。训练开始前必须至少保留 10 个有效图。

使用方法

在文件顶部的参数区选择模型:

1
2
3
MODEL_NAME = "coGN"
# 或者
MODEL_NAME = "coNGN"

然后运行:

1
python mcoNGN_v1.py

默认设置使用固定随机种子 SEED = 42,按照 80%/10%/10% 划分训练集、验证集和测试集。目标值使用训练集统计量进行标准化;优化器为 AdamW,损失函数为 MSE;学习率根据验证集表现自动降低,并依据验证集 RMSE 进行早停。检测到 CUDA 时会自动使用 GPU,并开启自动混合精度。

程序会在后续运行中复用已有的数据划分和图缓存。若修改了数据集或构图相关参数,建议更换 RUN_VERSION,或先移动对应的旧输出目录。

输出文件

输出目录由所选模型决定:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
coGN_v1/                         # 选择coNGN时为coNGN_v1/
├── coGN_best.pt                 # 当前模型的最优检查点
├── cache/coGN_graphs/           # 图缓存
├── dat/
│   ├── coGN_parity_train.dat
│   ├── coGN_parity_val.dat
│   ├── coGN_parity_test.dat
│   ├── coGN_parity_all.dat
│   └── coGN_rmse_curve.dat
├── figure/
│   ├── coGN_parity_train.jpg
│   ├── coGN_parity_val.jpg
│   ├── coGN_parity_test.jpg
│   ├── coGN_parity_all.jpg
│   └── coGN_rmse_curve.jpg
├── log/coGN_training.log
├── split/coGN_split.csv
└── table/coGN_metrics.dat

当 MODEL_NAME = "coNGN" 时,上述示例中的所有 coGN 前缀都会替换为 coNGN。如果启用 Optuna,还会生成 table/<MODEL_NAME>_optuna_best_params.json。

检查点保存模型权重、模型与构图配置、目标标准化参数、最佳轮次、最佳验证集 RMSE、随机种子和训练参数。代码提供的 predict_cifs() 函数可以加载检查点并预测新的 CIF 文件。

引用

原始 coGN/coNGN 文献:

本工作:

论文正式发表后补充。