【问题标题】:Dynamic Unrolling of Simple Neural Nets using Keras使用 Keras 动态展开简单神经网络
【发布时间】:2020-03-21 12:55:51
【问题描述】:

我正在尝试复制一个神经网络来计算分子的能量(下图)。能量是键合/非键合相互作用和角/二面角应变的总和。我有 4 个独立的神经网络,可以找出每个神经网络产生的能量,总能量是每次相互作用产生的能量之和,可能有 100 个。在我的数据集中,我只知道总能量。

如果我的总能量是在不同的神经网络上使用多个(未知数,由分子决定)正向位置计算的,我如何让 keras 通过动态构造的总和进行反向传播。非 keras 的 Tensorflow 方法也可以。 (如果我事先知道会有多少键,我就会把神经网络的输出加在一起,问题是必须在运行时展开神经网络的副本)。

这只是论文中给出的示例图像:

总而言之,问题是:“如何实现动态展开并将其提供给 Keras 中的总和?”。

【问题讨论】:

  • 你试过什么?就您目前的问题而言,没有太多要回答的。
  • 我现在什么都没有,我知道 RNN 会实时展开神经网络,但这里我需要实时展开常规 Dense 网络。我只需要语法,我知道如何使用 numpy 来实现。
  • 基本上,我的想法是,一旦我一直向前 POS 并生成最终结果,反向传播将均匀地传递到所有原始网络,任何 sum 函数反向传播。但我想干净利落地做这件事,而不是编写很多东西,论文还说他们使用 Keras 进行管理。有什么语法提示吗?

标签: tensorflow machine-learning keras neural-network backpropagation


【解决方案1】:

如果其中一个维度未知,Keras 层可以被赋予(None, actual-shape...) 的形状。然后我们可以使用 TensorFlow 层对使用tf.reduce_sum(layer, axis=0) 索引为 0 的轴求和。所以动态层大小在 Keras 中并不难实现。

但是,如果输入形状构成更多约束,我们可以传入附加了虚拟 0 值的完整矩阵和掩码矩阵,然后我们可以使用 tf.multiply 拒绝虚拟值,反向传播将自动工作当然。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-12-09
    • 1970-01-01
    • 2022-01-08
    • 2019-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-21
    相关资源
    最近更新 更多