将未处理的输入添加到神经网络中的后续层

问题描述 投票:0回答:1

如果这是一个开放式问题,我深表歉意。我在 R 中工作,使用

keras
库;我想训练一个神经网络来逼近一个函数 f(y, x),我知道真正的 fy 中增加(但在 x 中不增加)。 y 是标量,而 x 是向量。

我需要由受过训练的 NN 表示的 f 的估计值——我们称之为 g——也在 y 中增加。我的想法是对在其祖先中具有 y 的任何节点的权重使用非负性约束;仅处理 x 的节点具有不受约束的权重,因此可以对 x 的变化做出非单调响应。

如何在

keras
中执行此操作?好吧,我的一个想法是

  1. 在多个合适的层中处理x,权重不受约束,然后
  2. 处理这些层的输出(我们称之为z)和y在所有权重都被限制为非负的其他层中。

这两个步骤单独来看都不困难,但我遇到的困难是弄清楚如何在其他输入已经处理后从本质上向 NN 提供新输入。

这不像将整个 NN 一分为二那么容易,当然,即将两个 NN 粘合在一起。 x的初始处理结果没有单一的“正确”z;事实上,我什至无法衡量中间结果 z 到底有多“好”,我只能通过将其与已知的 f( y, x) 在我的训练数据中。 就是说,也许有一种简单/直接的方式来架构 [1] NN,使 y 未经处理地传递初始层,仅用作后面一层的输入。 我查看了

keras

文档并搜索了谷歌等,但无济于事。我不是神经网络或任何类型的统计学习方面的专家,也不是keras方面的专家(更不用说 TensorFlow 及其背后的任何其他东西)。我只想使用这个

keras

来满足我的应用程序需求,并且可以使用一些不太技术性的帮助:如何执行上述操作。

旁注:我不太在意我的具体方法。最终,任何给我一个 
g(y, 
x

)

保证在 y 而不是在 x 中增加的 NN 对我来说都很好。 谢谢! 我希望这是一个词。

    回答自己,是的,这似乎是可能的;但是,NN 不能是连续的,特别是你不能使用
  1. keras_model_sequential()
  2. 。相反,
r keras neural-network
1个回答
0
投票
使用

layer_input(shape = ..., name = "...")

创建两个单独的输入层(例如将它们命名为
x

    y
  1. ),并分配给例如
    input_x
    input_y
    ;
    x
    的输入层通过管道传输到具有无约束权重的所需处理层,并将生成的神经网络“构建块”分配给例如
    intermediate_z
    ;
  2. 使用
    y
    组合此构建块和
    layer_concatenate(inputs = list(intermediate_z, input_y))
    的输入层并分配给例如
  3. output_f
  4. ;
    将其通过管道传输到具有约束权重的进一步处理层;
    将 NN 创建为 
    keras_model(inputs = list(input_x, input_y), output = output_f)
    ;
  5. 像往常一样使用
  6. compile()
  7. 编译 NN;
    使用 
  8. fit(list("x" = train_x, "y" = train_y), train_f, ...)
  9. 训练 NN(其中列表元素的名称对应于您在步骤 1 中分配给输入层的名称);
    使用
  10. predict((list("x" = new_x, "y" = new_y))
  11. 预测新值。
    
    
  12. 我发现
  13. TensorFlow API 功能指南
     很有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.