mReciNet
mReciNet
mReciNet 是一个基于 PyTorch 和 PyTorch Geometric 的独立 ReciNet 实现,用于根据 CIF 晶体结构预测材料带隙。
代码将周期性局域晶体图与倒空间长程建模相结合,保留了 ReciNet 的主要组成部分,包括门控局域消息传递、根据每个晶体的晶格生成倒格矢、倒空间结构因子更新、局域与长程表示的逐层融合、图级平均池化和标量回归头。代码使用 pymatgen 解析 CIF 并构建周期性晶体图,不依赖 JARVIS、原始 ReciNet 仓库、YAML 配置文件或仓库内部模块。
默认模型使用92维占据率加权原子序数特征、4.0 Å局域截断半径、每个原子最多16个邻居、16个最短非零倒格矢、4层局域/倒空间交互层、256维隐藏表示和64维倒空间降维表示。
环境依赖
|
|
torch-scatter 为可选依赖。若已安装,脚本使用 torch_scatter.scatter_add;若未安装,则自动回退到 PyTorch 原生的 index_add_。
仅当 USE_OPTUNA = True 时需要安装 Optuna:
|
|
数据准备
在脚本所在目录中准备以下文件:
|
|
脚本读取 data.xlsx 的前两列:
| cif | bandgap |
|---|---|
| 1 | 1.23 |
| 2 | 0.87 |
| 3 | 2.15 |
第一列会转换为整数形式的 CIF 编号。例如,1 对应 ./cif/1.cif。无效标签、缺失的 CIF 文件、没有有效周期邻居的结构以及 CIF 解析失败样本会被跳过,并记录在训练日志中。
使用方法
|
|
脚本会自动完成 CIF 检查与晶体图缓存、以42为随机种子的固定80/10/10训练集/验证集/测试集划分、仅在训练集上拟合的标签归一化、采用 MSE 损失的模型训练、基于验证集 RMSE 的早停、最佳权重重新加载、最终评估和绘图。当 CUDA 可用时自动使用 GPU,否则使用 CPU。
所有结果保存在由 MODEL_NAME 和 RUN_VERSION 确定的目录中。按照默认设置,输出目录为:
|
|
输出内容包括训练集、验证集和测试集的 MAE、RMSE 与 R2,单独及合并的奇偶图与源数据,RMSE 训练曲线与源数据,可复用的固定数据划分,缓存的晶体图,最佳模型权重和完整训练日志。最佳模型文件保存模型配置、晶体图配置、标签归一化参数、最佳 epoch、验证集 RMSE 和模型权重。脚本还提供 load_trained_model() 和 predict_cifs(),可用于预测新的 CIF 文件。
将 USE_OPTUNA 设置为 True 后,可仅使用训练集和验证集优化批量大小、学习率、权重衰减、隐藏维度、交互层数、倒空间降维维度和 dropout。测试集不参与超参数选择。
引用
原始 ReciNet 文献:
本工作:
论文正式发表后补充。