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,再安装其余依赖:
|
|
只有将 USE_OPTUNA 设为 True 时才需要安装 Optuna:
|
|
数据准备
将 data.xlsx、代码文件和 cif 文件夹放在同一工作目录:
|
|
程序只读取 data.xlsx 的前两列。第一列必须是整数形式的 CIF 编号,例如编号 1 对应 ./cif/1.cif;第二列是回归目标值。
| CIF编号 | bandgap |
|---|---|
| 1 | 1.237 |
| 2 | 2.104 |
| … | … |
程序会跳过目标值无效、CIF 缺失或无法读取、不能生成有效图的样本。训练开始前必须至少保留 10 个有效图。
使用方法
在文件顶部的参数区选择模型:
|
|
然后运行:
|
|
默认设置使用固定随机种子 SEED = 42,按照 80%/10%/10% 划分训练集、验证集和测试集。目标值使用训练集统计量进行标准化;优化器为 AdamW,损失函数为 MSE;学习率根据验证集表现自动降低,并依据验证集 RMSE 进行早停。检测到 CUDA 时会自动使用 GPU,并开启自动混合精度。
程序会在后续运行中复用已有的数据划分和图缓存。若修改了数据集或构图相关参数,建议更换 RUN_VERSION,或先移动对应的旧输出目录。
输出文件
输出目录由所选模型决定:
|
|
当 MODEL_NAME = "coNGN" 时,上述示例中的所有 coGN 前缀都会替换为 coNGN。如果启用 Optuna,还会生成 table/<MODEL_NAME>_optuna_best_params.json。
检查点保存模型权重、模型与构图配置、目标标准化参数、最佳轮次、最佳验证集 RMSE、随机种子和训练参数。代码提供的 predict_cifs() 函数可以加载检查点并预测新的 CIF 文件。
引用
原始 coGN/coNGN 文献:
本工作:
论文正式发表后补充。