自定义(卷积)连接在两个Keras层之间

我正在寻找一种方法来定义两个Keras层之间的自定义互连。我希望模拟卷积行为,并使用自定义且可变数量的输入。下面的简化示例说明了我的需求。输入0、1和2应合并到一个单元格中。输入3应单独考虑,而4和5也应合并。在示例中,输入组(0, 1, 2)、(3)和(4, 5)总是合并在一个神经元中。进一步的步骤将是将它们组合到多个神经元中(例如,输入0、1和2进入两个隐藏层神经元)。

       X        Output layer    /  |  \  X    X   X    Hidden layer /|\   |  / \X X X  X  X X   Input layer0 1 2  3  4 5

我在Keras文档中没有找到直接解决这个问题的方案,或者可能是我找错了地方。卷积层总是期望固定数量的输入值。这个问题对我来说似乎并不复杂。我没有提供任何代码,因为目前还没有值得分享的内容。然而,一旦我找到一个可行的解决方案,我会更新这个问题并附上代码。

关于这个问题的背景。我将分类值分解成热向量。例如,将具有三个表现形式的分类值’a’、’b’、’c’分解成(1, 0, 0)、(0, 1, 0)和(0, 0, 1)。这些与其他值一起输入到神经网络中。在上述示例网络中,导致输入为(1, 0, 0, X, X, X)、(0, 1, 0, X, X, X)和(0, 0, 1, X, X, X)(X表示任意值)。当我现在有一个全连接层时,网络会丢失输入0、1和2实际上来自同一个变量并且应该一起考虑的信息。通过上面的架构,我希望确保网络在与其他变量相关联之前一起考虑这些值。我希望这有意义,如果没有,请告诉我为什么。

更新:提供的答案给出了一个很好的代码示例。


回答:

您正在寻找的是Keras的函数式API

您可以定义网络的三个输入,然后根据您的喜好在其上构建模型。

from keras.layers import Input, Dense, Conv1D, Concatenatex = Input(shape=(None, 3))y = Input(shape=(None, 1))z = Input(shape=(None, 2))conv_x = Conv1D(...)(x)conv_y = Conv1D(...)(y)conv_z = Conv1D(...)(z)conv = Concatenate(axis=-1)([conv_x, conv_y, conv_z])

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注