目录

mMODNet

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

mMODNet

mMODNet 是一个基于 PyTorch 的独立 Material Optimal Descriptor Network(MODNet)实现,用于根据 CIF 晶体结构预测材料带隙。

代码使用 pymatgen 解析 CIF,并使用 matminer 生成组成和结构描述符。代码保留了 MODNet 的主要流程,包括材料描述符生成、基于归一化互信息的相关性—冗余度(RR)特征筛选、描述符预处理、分层全连接表征模块和标量回归。代码不依赖 TensorFlow、原始 modnet 软件包或原仓库内部模块。

默认描述符包括 BandCenter、ElementFraction、Magpie 和元素属性统计、化学计量、过渡金属比例、价轨道比例、密度、Ewald 能量、全局对称性及结构复杂度等。缺失值填充、方差筛选、RR 排序和标准化均只使用训练集拟合。

环境依赖

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

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

1
pip install optuna

数据准备

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

1
2
3
4
5
6
mMODNet_v1.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。当前脚本使用 int(raw_name) 转换第一列的数值,因此 CIF 编号必须是数字。

使用方法

1
python mMODNet_v1.py

脚本会自动完成 CIF 检查、描述符生成与缓存、固定的 80/10/10 训练集/验证集/测试集划分、仅基于训练集的 RR 特征筛选、模型训练、早停、评估和绘图。当 CUDA 可用时自动使用 GPU 和 BF16 自动混合精度,否则使用 CPU。

默认配置从最多 256 个 RR 候选描述符中选择 128 个描述符,并使用维度分别为 (256, 128)、(128, 64) 和 (64, 32) 的分层全连接模块。训练采用 MSE 损失,验证集 RMSE 用于学习率调度、早停和最佳模型选择。

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

1
2
3
4
5
6
7
8
MODNet_v1/
|-- MODNet_best.pt
|-- figure/
|-- dat/
|-- table/
|-- log/
|-- split/
|-- cache/

输出内容包括训练集、验证集和测试集的 MAE、RMSE 与 R2,单独和合并的奇偶图及其数据,RMSE 训练曲线及其数据,RR 筛选描述符排序,固定数据划分,描述符缓存,最佳模型权重和完整训练日志。checkpoint 保存模型配置和预处理信息,可供脚本中的 load_trained_model() 与 predict_cifs() 函数调用。

引用

原始 MODNet 文献:

本工作:

论文正式发表后补充。