目录

mCGCNN

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

mCGCNN

mCGCNN 是一个基于 PyTorch 的独立晶体图卷积神经网络(Crystal Graph Convolutional Neural Network,CGCNN)实现,用于根据 CIF 晶体结构预测材料带隙。

代码保留了 CGCNN 的主要组成部分,包括原始的 92 维元素描述符、周期性晶体近邻构建、高斯距离展开、门控晶体图卷积、晶体级平均池化和标量回归头。原始 atom_init.json 中的元素特征经过压缩后直接嵌入脚本,因此不需要额外的原子特征文件,也不依赖原始 CGCNN 仓库。代码使用 pymatgen 解析 CIF 并构建周期性近邻。

模型与训练

默认配置如下:

参数 默认值
截断半径 8.0 Å
每个原子的最大近邻数 12
高斯距离展开步长 0.2 Å
原子隐藏特征维度 64
CGCNN 卷积层数 3
晶体隐藏特征维度 128
批大小 64
最大训练轮数 300
学习率 1.0 × 10⁻³
权重衰减 1.0 × 10⁻⁵
早停耐心值 40 轮

脚本使用 MSELoss 进行优化,采用 AdamW 优化器和 ReduceLROnPlateau 学习率调度器,并以验证集 RMSE 作为早停和最佳模型选择的依据。标签归一化参数仅在训练集上拟合。CUDA 可用时自动使用 GPU 和自动混合精度,否则使用 CPU。

环境依赖

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

仅当 USE_OPTUNA = True 时需要安装 Optuna:

1
pip install optuna

本脚本不需要 PyTorch Geometric、DGL、JARVIS 或原始 CGCNN 软件包。

数据准备

在脚本所在目录中准备以下文件:

1
2
3
4
5
6
mCGCNN_v2.py
data.xlsx
cif/
|-- 1.cif
|-- 2.cif
|-- 3.cif

脚本读取 data.xlsx 的前两列:

cif bandgap
1 1.23
2 0.87
3 2.15

第一列中的 1 对应 ./cif/1.cif。CIF 文件名可以包含或省略 .cif 后缀,表格中的 1.0 等整数形式数值会自动转换为 1.cif。

脚本仅接受有序晶体结构。缺失的 CIF 文件、无效标签、无法读取的结构、无序结构和部分占位结构会被跳过,并在训练日志中记录原因。

使用方法

1
python mCGCNN_v2.py

脚本会自动完成 CIF 检查与晶体图缓存、基于 SEED = 42 的固定 80/10/10 训练集/验证集/测试集划分、模型训练、早停、评估和绘图。如果已有划分文件与当前有效数据一致,脚本会自动复用该划分,以保证重复运行的一致性。

Optuna 默认关闭。如需优化 CGCNN 特征维度、卷积层数、隐藏层数、学习率和权重衰减,可设置:

1
USE_OPTUNA = True

所有结果保存在由 MODEL_NAME 和 RUN_VERSION 确定的目录中。按照默认设置,输出目录为:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
CGCNN_v2/
|-- CGCNN_best.pt
|-- figure/
|   |-- CGCNN_parity_train.jpg
|   |-- CGCNN_parity_val.jpg
|   |-- CGCNN_parity_test.jpg
|   |-- CGCNN_parity_all.jpg
|   `-- CGCNN_rmse_curve.jpg
|-- dat/
|-- table/
|   `-- CGCNN_metrics.dat
|-- log/
|   `-- CGCNN_training.log
|-- split/
|   `-- CGCNN_split.csv
`-- cache/

输出内容包括训练集、验证集和测试集的 MAE、RMSE 与 R²,四组奇偶图及其数据,RMSE 训练曲线及其数据,固定数据划分、最佳模型权重和完整训练日志。

最佳 checkpoint 保存模型参数、模型与晶体图配置、标签归一化参数、最佳轮数、最佳验证集 RMSE、训练历史、目标属性信息和内嵌原子特征。脚本还提供 load_trained_model() 和 predict_cifs(),可用于预测新的 CIF 结构。

v1

该脚本基于PyTorch实现了一个晶体图卷积神经网络(CGCNN)训练框架,用于预测晶体材料的目标性质(如超导临界温度Tc)。程序从data.xlsx读取结构ID与标签,从cif目录加载结构文件,并根据CIFDATA_VARIANT构建不同类型的原子或边特征(包括电负性差Δχ的多种编码方式)。支持train/test划分或KFold交叉验证,集成EarlyStopping与学习率调度,输出MAE、RMSE、R2等指标并保存结果文件。在开启USE_OPTUNA时,可自动进行超参数搜索并保存每次试验的模型与日志。

运行命令:python mCGCNN_v22.py。

  • CIFDATA_VARIANT:选择特征构建方式(origin 原始特征,atom 加入原子电负性特征,edge 加入边电负性差特征)。

  • DELTA_EN_FEAT_MODE:Δχ特征编码方式(raw、poly、rbf、fourier 或 all)。

  • n_folds:交叉验证折数(设为整数表示KFold,'none' 表示单次划分)。

  • train_ratio / test_ratio:训练集与测试集划分比例。

  • batch_size:每次梯度更新的样本数。

  • lr:初始学习率。

  • epochs:最大训练轮数。

  • patience:EarlyStopping的参数。

  • atom_fea_len:原子特征嵌入维度。

  • h_fea_len:全连接隐藏层维度。

  • n_conv:图卷积层数。

  • n_h:全连接隐藏层数量。

  • USE_OPTUNA:是否启用Optuna自动超参数优化。

  • OPTUNA_TRIALS:Optuna搜索的试验次数。

引用

原始 CGCNN 文献:

本工作:

v2:

论文正式发表后补充。

v1: