Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

SIGN算法的数据预处理错误 #141

Closed
chrisxu2016 opened this issue Aug 13, 2021 · 4 comments
Closed

SIGN算法的数据预处理错误 #141

chrisxu2016 opened this issue Aug 13, 2021 · 4 comments

Comments

@chrisxu2016
Copy link

chrisxu2016 commented Aug 13, 2021

  1. setxor错误:举例输入 setxor(a=[1, 0], b=[0, 2]),将会得到 [0, 1, 0, 2], [], 实际上按照bond_graph_base的生成方式,只需要取a[0]和 b[1]即可

    bodyxor, link = setxor(body1, body2)

  2. 这里输出的atoms使用的是atom在特征矩阵的维度, 与后面的atom_type不符, 提供的处理好的数据是没有问题的(https://www.dropbox.com/sh/68vc7j5cvqo4p39/AAB_96TpzJWXw6N0zxHdsppEa)

    return lig_size, coords, feas, atoms

存在疑惑的地方:
3. 如果 a边:[0, 1 ], b边[1, 0], 则c边为[0, 0], 如果取dist_mat[0, 0],则c边长度为inf,计算可得夹角为180度(encode为5)但按照其它的边的夹角构造方式,则夹角应该为0度(encode为0)

c = dist_mat[bodyxor[0], bodyxor[1]]

image

@chrisxu2016 chrisxu2016 changed the title SIGN算法的数据预处理3处错误 SIGN算法的数据预处理错误 Aug 13, 2021
@chrisxu2016
Copy link
Author

更新一下,我修正这些问题之后的结果是
RMSE: 1.238, MAE: 0.978, SD: 1.23, R: 0.824
论文结果: RMSE: 1.316(0.031), MAE: 1.027(0.025), SD: 1.312(0.035), R:0.797(0.012)

@agave233
Copy link
Contributor

感谢指出的问题。

  1. 这部分确实是数据处理部分存在的bug,今天进行了修复并重新实验,在我们机器环境下与论文结果相差不大,结果如下:
RMSE: 1.311(0.021), MAE: 1.021(0.009), SD: 1.312(0.027), R:0.798(0.008)
  1. 在特征抽取时针对不同数据格式我们当时尝试了不同的方法,在release代码时放错了函数,实际生成的预处理数据集没有问题

  2. 我们在代码中其实有加入去除图中情况的处理策略,来避免a_01和a_10相连,同样在整理发布代码时有所疏忽。

bond_graph_base[range(num_bonds), [indices.index([x[1],x[0]]) for x in indices]] = 0 

我们会在近期同步修正以上问题后的代码~

@chrisxu2016
Copy link
Author

chrisxu2016 commented Aug 17, 2021

好的,我试下去掉自邻边看看,这样做除了减少计算量,有什么其它好处吗?

PS. 提两个小的建议,可以加速数据预处理

  1. bond2bond的邻接矩阵计算,可以采用gpu来加速计算两个矩阵的外积,例如使用cupy
import cupy as cp

bond_graph_base = cp.matmul(cp.array(assignment_b2a, dtype='int8'), cp.array(assignment_a2b, dtype='int8')).get()

bond_graph_base = assignment_b2a @ assignment_a2b

  1. 两边的夹角计算可以用numpy来并行计算

我采用了这两个策略后,平均每个样本的处理耗时0.1S左右

@agave233
Copy link
Contributor

好的,我试下去掉自邻边看看,这样做除了减少计算量,有什么其它好处吗?

PS. 提两个小的建议,可以加速数据预处理

  1. bond2bond的邻接矩阵计算,可以采用gpu来加速计算两个矩阵的外积,例如使用cupy
import cupy as cp

bond_graph_base = cp.matmul(cp.array(assignment_b2a, dtype='int8'), cp.array(assignment_a2b, dtype='int8')).get()

bond_graph_base = assignment_b2a @ assignment_a2b

  1. 两边的夹角计算可以用numpy来并行计算

我采用了这两个策略后,平均每个样本的处理耗时0.1S左右

这里是类似于atom graph里去掉self-loop,主要目的还是让模型学习每个target atom/bond的周围邻居的空间分布。或者单独再划分一个domain来加入这种『自邻边』也是可以的,我们之后也准备进一步尝试一下不同的策略。

特别感谢提出的一系列建议👍🏻

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants