图神经网络代码_材料科学中的数据挖掘:晶体图神经网络解读与代码解析

本文解读了《Crystal Graph Neural Networks for Data Mining in Materials Science》这篇论文,介绍了晶体图神经网络(CGNN)的概念,并提供了代码链接和OQMD数据库资源。CGNN用于准确预测材料性质,通过原子坐标构建晶体图进行处理。文章还讨论了实验结果和相关应用。
摘要由CSDN通过智能技术生成

213b8999c1a50ef2505a6dd50d51b86e.gif

©PaperWeekly 原创 · 作者|张玮玮

学校|东北大学硕士

研究方向|情绪识别

c6afdf91353c03aa9b3ac90679d4a966.png

论文标题:

Crystal Graph Neural Networks for Data Mining in Materials Science

论文链接:

https://storage.googleapis.com/rimcs_cgnn/cgnn_matsci_May_27_2019.pdf

代码链接:

https://github.com/Tony-Y/cgnn

OQMD 数据库(这个数据库比较大,提供 python API 与晶体结构可视化,可以使用 MySQL 读入):OQMD [2]

晶体材料性质一般通过输入晶胞内的原子数目、原子分子坐标、晶格常数利用密度泛函理论(DFT)计算得出。机器学习方法在加速新材料设计方面正变得越来越流行,其预测材料性能的准确性接近从头算计算,但计算速度要快数量级。最近有人提出用称为晶体图来表示晶体材料 [1] ,适应于晶体图的卷积神经网络利用平衡键距作为空间信息成功地预测了材料的体积特性。

a1402493b0cebe62be7feeb5985d7b91.png

预备知识

1.1 晶格常数(点阵常数) 晶胞三个棱的常数以及这三个棱之间的夹角 6 个参数组成。按晶格常数的不同可以分为七大晶系。在本文中点阵矢量定义为 。

1.2 原子坐标

原子坐标有两种表示形式:分数坐标和笛卡尔坐标。分数坐标是把点阵矢量看成是单位矢量下确定原子位置; 笛卡尔坐标是绝对坐标,是直角坐标系与斜角坐标系的统称,考虑点阵常数的大小。本文利用的是原子的分数坐标 。笛卡尔坐标可以和分数坐标相互转换,在 定义的晶胞中,第 个原子的笛卡尔位置计算为 ,单元格体积 必须大于 0。 1.3 晶体性质 晶体材料的总能量取决于晶体结构 ,并且可以使用 DFT 来近似计算,其中,原子数目为 。近似能量表示为:,可以通过最小化总能量来得到平衡结构:

e386c436e4d1023ab2fb4419f7f56e7c.png

表示平衡能的最小值。DFT 计算也给出体积特性,如形成能 、单位单元体积 、带隙 和总磁化强度 。 1.4 数据集 现有的理论材料数据库包含了无机晶体材料的松弛结构及其性能。The Materials Project(MP)数据库拥有 86k 条目,大多与实验观察到的结构有关。The Open Quantum Materials Database(OQMD v1.2)包含 563k 个与实验和假设化合物相关的条目。  7dc548bc02e0a5faeaf2763598ce1df7.png

晶体图神经网络

晶体图神经网络(CGNNs)引入了一种比例不变的图协调器(Crystal Graph Coordinator)来构成晶体图,用于在 OQMD 数据集上训练 CGNN 模型。CGNN模型对每一种测试材料的形成能、单元体积、带隙和总磁化强度等体积特性进行了预测,其平均误差小于数据库中相应的误差。将预测的带隙和总磁化率用于金属绝缘体和非磁-磁材料二元分类。 

107b5b9e62db66a30b8577e17fc627ab.png

CGNN 框架如图 1 所示,CG-Gen 是原子序数的函数,会产生平衡结构下的晶体图 , 是有向边的集合 。P-CGNN 是一个预测平衡特性的多任务模型,。S-CGNN 是在 条件下,推导出晶胞形状 和原子分数坐标 。本文通过预测的晶胞体积来缩放 来获得平衡晶胞 。 

2.1 The Crystal Graph Coordinator

为了训练 CGNN 和 CG-Gen,框架需要一组由平衡结构组成的晶体图。在晶体学中,用泰森多边形找出原子的最近邻居,参考文献 [1] 运用了该方法。CGNN 引入了一种晶体图协调器,它通过聚类来连接原子间的原子间距。由于使用了体积校正因子和缩放距离,晶体图在单位单元的任何均匀变形下都具有不变性。伪代码如下图所示:

df6fdb50354079bf69413cd9c3e2cd9b.png

源代码如下所示:

def get_neighbors(geom):
    elems = [Element.from_Z(z) for z in geom.atomic_numbers]#通过原子序数来得到元素种类;OQMD数据库共有89种化学元素,原子序数为1到83,89到94
    radii = np.array([get_radius(e) for e in elems])#原子半径是从PyMatGen库获得
    cutoff = radii[:,np.newaxis] + radii[np.newaxis, :]#将任意两个原子的半径相加,比如有4种原子,则返回一个4*4的矩阵。
    vol_atom = (4 * np.pi / 3) * np.array([r**3 for r in radii]).
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值