我正在寻找一种在两个 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])
关于machine-learning - 两个 Keras 层之间的自定义(卷积)连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48296149/