【发布时间】:2021-02-08 04:02:39
【问题描述】:
我正在尝试将多个输入提供给单个输入层。准确地说,它是一种原子势。因此,NN 应该根据原子坐标(原子描述符)来预测分子的能量。
让我们以 H2O 为例。因此,它有两个 H 原子和一个 O。 以下是 NN 的组织方式:每个化学元素坐标的单独输入(即,一个用于 H,一个用于 O)。然后这两个单独的图产生了它们自己的局部能量。输出层是这些能量的总和,应该与目标总能量相匹配。 也就是说,这对于仅 OH 分子来说很容易:H 和 O 的两个平行图,每个图都有自己的原子能量,然后它们连接并求和以匹配目标总能量。
但是,在 H2(或 H2O)的情况下,我有两个 H 原子。因此,我需要将一个 H 原子馈送到 H-graph,然后将第二个 H 原子馈送到同一个图,将它们求和,然后将它们发送到应该与目标总能量匹配的输出层。
有没有办法在 Keras 中执行此操作?
我的代码不能带两个H:
# graph for H
input1 = keras.Input(shape=(n_cols,), name="H_element")
l1_1 = Dense(8, activation='relu')(input1)
l1_2 = Dense(1, activation='linear',name = 'H_atomic_energy')(l1_1) #atomic energy for H
# graph for O
input2 = keras.Input(shape=(n_cols,), name="O_element")
l2_1 = Dense(8, activation='relu')(input2)
l2_2 = Dense(1, activation='linear', name = 'O_atomic_energy')(l2_1) #atomic energy for O
# summation and output. Total energy is the target
x = layers.concatenate([l1_2, l2_2])
ReduceSum = Lambda(lambda z: K.sum(z, axis=1, keepdims=True))
output = ReduceSum(x)
model = keras.Model(
inputs=[input1, input2],
outputs=output,)
视觉描述
【问题讨论】:
标签: python keras deep-learning neural-network chemistry