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。
环境依赖
|
|
仅当 USE_OPTUNA = True 时需要安装 Optuna:
|
|
本脚本不需要 PyTorch Geometric、DGL、JARVIS 或原始 CGCNN 软件包。
数据准备
在脚本所在目录中准备以下文件:
|
|
脚本读取 data.xlsx 的前两列:
| cif | bandgap |
|---|---|
| 1 | 1.23 |
| 2 | 0.87 |
| 3 | 2.15 |
第一列中的 1 对应 ./cif/1.cif。CIF 文件名可以包含或省略 .cif 后缀,表格中的 1.0 等整数形式数值会自动转换为 1.cif。
脚本仅接受有序晶体结构。缺失的 CIF 文件、无效标签、无法读取的结构、无序结构和部分占位结构会被跳过,并在训练日志中记录原因。
使用方法
|
|
脚本会自动完成 CIF 检查与晶体图缓存、基于 SEED = 42 的固定 80/10/10 训练集/验证集/测试集划分、模型训练、早停、评估和绘图。如果已有划分文件与当前有效数据一致,脚本会自动复用该划分,以保证重复运行的一致性。
Optuna 默认关闭。如需优化 CGCNN 特征维度、卷积层数、隐藏层数、学习率和权重衰减,可设置:
|
|
所有结果保存在由 MODEL_NAME 和 RUN_VERSION 确定的目录中。按照默认设置,输出目录为:
|
|
输出内容包括训练集、验证集和测试集的 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: