【问题标题】:Custom (convolutional) connections between two Keras layers两个 Keras 层之间的自定义(卷积)连接
【发布时间】:2018-01-17 07:57:33
【问题描述】:

我正在寻找在两个 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 实际上来自同一个变量的信息,应该一起考虑。使用上面的架构,我想确保网络在将这些值与其他变量关联之前将它们一起考虑。我希望这是有道理的,如果没有,请告诉我原因。

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

【问题讨论】:

    标签: machine-learning neural-network keras conv-neural-network


    【解决方案1】:

    您正在寻找的是 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])
    

    【讨论】:

    • 好的,这正是我想要的。非常感谢。
    猜你喜欢
    • 2017-07-25
    • 2018-04-26
    • 1970-01-01
    • 1970-01-01
    • 2018-07-30
    • 1970-01-01
    • 2018-12-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多