作者:A-Alon_586 | 来源:互联网 | 2023-10-12 17:55
我正在尝试复制一个神经网络来计算分子的能量(下图)。能量是键合/非键合相互作用与角/二面体应变之和。我有4个单独的神经网络,它们找出每种能量的总和,总能量是每种相互作用所产生的能量之和,可能有100s。在我的数据集中,我只知道总能量。
如果我的总能量是使用不同神经网络上的多个正向位置(由分子决定的未知数)来计算的,那么我该如何通过动态构造的和来使角膜反向传播。非Keras Tensorflow方法也可以使用。 (如果我事先知道会有多少键,我将把神经网络的输出加在一起,那么问题就是必须在运行时展开神经网络的副本。)
这只是本文中给出的示例图像:
总而言之,问题是:“如何实现动态展开并将其馈送到Keras中的总和?”
如果其中一个维度未知,则可以将Keras层的形状设为(None,actual-shape...)
。然后,我们可以使用TensorFlow层使用tf.reduce_sum(layer,axis=0)
在索引为0的轴上求和。因此,在Keras中不难实现动态图层大小。
但是,如果输入形状构成更多约束,则可以传入附加了伪0值的完整矩阵和掩码矩阵,然后可以使用tf.multiply
拒绝伪值,反向传播将当然会自动工作。