如果这是一个开放式问题,我深表歉意。我在 R 中工作,使用
keras
库;我想训练一个神经网络来逼近一个函数 f(y, x),我知道真正的 f 在 y 中增加(但在 x 中不增加)。 y 是标量,而 x 是向量。
我需要由受过训练的 NN 表示的 f 的估计值——我们称之为 g——也在 y 中增加。我的想法是对在其祖先中具有 y 的任何节点的权重使用非负性约束;仅处理 x 的节点具有不受约束的权重,因此可以对 x 的变化做出非单调响应。
如何在
keras
中执行此操作?好吧,我的一个想法是
这两个步骤单独来看都不困难,但我遇到的困难是弄清楚如何在其他输入已经处理后从本质上向 NN 提供新输入。
这不像将整个 NN 一分为二那么容易,当然,即将两个 NN 粘合在一起。 x的初始处理结果没有单一的“正确”z;事实上,我什至无法衡量中间结果 z 到底有多“好”,我只能通过将其与已知的 f( y, x) 在我的训练数据中。 就是说,也许有一种简单/直接的方式来架构 [1] NN,使 y 未经处理地传递初始层,仅用作后面一层的输入。 我查看了
keras
文档并搜索了谷歌等,但无济于事。我不是神经网络或任何类型的统计学习方面的专家,也不是keras
方面的专家(更不用说 TensorFlow 及其背后的任何其他东西)。我只想使用这个
keras
来满足我的应用程序需求,并且可以使用一些不太技术性的帮助:如何执行上述操作。
旁注:我不太在意我的具体方法。最终,任何给我一个g(y,
x)
保证在 y 而不是在 x 中增加的 NN 对我来说都很好。 谢谢! 我希望这是一个词。
keras_model_sequential()
layer_input(shape = ..., name = "...")
创建两个单独的输入层(例如将它们命名为
x
和y
input_x
和input_y
;将 x
的输入层通过管道传输到具有无约束权重的所需处理层,并将生成的神经网络“构建块”分配给例如intermediate_z
;y
组合此构建块和 layer_concatenate(inputs = list(intermediate_z, input_y))
的输入层并分配给例如output_f
keras_model(inputs = list(input_x, input_y), output = output_f)
;compile()
fit(list("x" = train_x, "y" = train_y), train_f, ...)
predict((list("x" = new_x, "y" = new_y))
很有帮助。