我正在寻找一种定义两个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 layer
0 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 functional API
。
您可以为网络定义三个输入,然后根据需要在此之上构建模型。
from keras.layers import Input, Dense, Conv1D, Concatenate
x = 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])
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句