mDenseGNN
mDenseGNN
mDenseGNN 是一个基于 PyTorch 和 PyTorch Geometric 的独立 DenseGNN 风格晶体图神经网络实现,用于根据 CIF 晶体结构进行带隙回归。
代码保留了本实现采用的主要 DenseGNN 机制,包括消息传递层之间的稠密连接、节点—边—图三级残差更新、结合元素周期表属性的可学习原子嵌入、周期性 Voronoi 晶体图、距离和 Voronoi ridge area 边特征、图级池化与标量回归头。代码使用 pymatgen 和 SciPy 解析 CIF 并构建周期性晶体图,不依赖原始 DenseGNN 仓库及其内部模块。
该单文件版本仅用于单目标 CIF 到带隙的回归任务,不包含力场训练、分类、多任务学习、Matbench 自动下载、交叉验证和消融实验等功能。
环境依赖
|
|
仅当 USE_OPTUNA = True 时需要安装 Optuna:
|
|
数据准备
在脚本所在目录中准备以下文件:
|
|
脚本读取 data.xlsx 的前两列:
| cif | bandgap |
|---|---|
| 1 | 1.23 |
| 2 | 0.87 |
| 3 | 2.15 |
第一列必须是数值型 CIF 编号。脚本使用 int(raw_name) 将其转换为整数并添加 .cif 后缀,因此第一列中的 1 对应 ./cif/1.cif。第二列为带隙,单位为 eV。空值、非有限目标值、缺失 CIF、重复编号、无效 CIF,以及无序或部分占位结构会被跳过,并在日志中记录原因。
可以在脚本开头修改输入路径和目标属性信息:
|
|
使用方法
|
|
脚本会自动完成 CIF 检查、周期性 Voronoi 图构建与缓存、固定的 80/10/10 训练集/验证集/测试集划分、目标标准化、模型训练、早停、评估和绘图,随机种子固定为 42。CUDA 可用时自动使用 GPU,否则使用 CPU。
训练采用 nn.MSELoss() 和 AdamW,并以验证集 RMSE 驱动 ReduceLROnPlateau 学习率调度,保存验证集 RMSE 最低的模型。默认配置使用 5 个 DenseGNN 层、128 维隐藏特征、0.10 的 Voronoi ridge-area 阈值、32 的批大小、最多 300 个 epoch,以及 50 个 epoch 的早停耐心值。
将 USE_OPTUNA 设置为 True 可启用可选的 Optuna 搜索,对隐藏维度、网络深度、批大小、学习率和权重衰减进行优化。优化过程中始终复用固定的训练集、验证集和测试集划分。
所有结果保存在由 MODEL_NAME 和 RUN_VERSION 确定的目录中。按照默认设置,输出目录为:
|
|
输出内容包括训练集、验证集和测试集的 MAE、RMSE 与 R2,三组独立奇偶图及合并奇偶图和相应 .dat 文件,训练集/验证集 RMSE 曲线及其 .dat 文件,固定数据划分,缓存的晶体图,最佳模型权重和完整训练日志。所有图像均保存为 600 dpi JPG 文件。
保存的模型可以通过 load_trained_model() 在其他程序中加载,并可使用 predict_cifs() 对新的 CIF 文件进行带隙预测。
引用
原始 DenseGNN 文献:
原始 DenseGNN 仓库:
本工作:
论文正式发表后补充。