用分子坐标预测能量,使用可扩展的神经网络
- 项目在https://github.com/B-C-WANG/DeepLearningMoleculeEnergyPredict,里面有主要的介绍
- 比较重要的设计思想:形成数据处理的流水线,但其中每一个阶段用pkl文件暂存,使其可以拆开来进行其他处理
重要的代码设计:
- 首先设计了一个类存储某一种原子的NN,然后把input和output作为成员
- 之后会建立多个原子的NN,然后以原子名称作为key,上面的input的graph作为value,然后所有的output的graph放到数组中,之后进行tf.concat
- 最后进行feed的时候,使用graph作为key进行feed
- 总的代码
def build_models(self):
self.models = []
self.input = {}
for atom in self.atom_cases:
model = AtomModel(self.feature_num,atom=atom)
self.models.append(model)
self.input[atom] = model.input
# 上面的input是另一个Dense NN 的input
outputs = [model.output for model in self.models]
concat = tf.concat(outputs, axis=1)
# 把多个Dense NN 的output收集起来concat
self.output = tf.reduce_sum(concat, axis=1)
self.sess.run(tf.global_variables_initializer())
def predict(self,x):
atom_feature_dict = x
feed_dict = {}
self.check_atom_feature_dict(atom_feature_dict)
for i in self.input:
# 这里用按照原子分类后的graph作为key,放入数据,因为tf支持占位符作为key喂入数据,很方便
feed_dict[self.input[i]] = atom_feature_dict[i]
return self.sess.run(self.output,feed_dict=feed_dict)
Similar Posts
0