machine-learning - 两个 Keras 层之间的自定义(卷积)连接

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

我正在寻找一种在两个 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/

相关文章:

machine-learning - 如何区分两个同名的不同命名实体?

c++ - 使用 C 与使用 C++ 实现神经网络?

tensorflow - 将现有模型以前动态的占位符尺寸设为静态

python - “元组”对象没有属性 'layer'

python - 我怎样才能在keras中制作一个可训练的参数?

tensorflow - 使用 keras 在 gcloud ml-engine 上处理 TB 数据的最佳方法

python - 需要有关 RNN 模型格式化字符串的建议

machine-learning - 为什么使用make_friedman1?

python - 如何在 Python 中计算 Jaccard 指数?

java - Selenium 。如果事先不知道选择器,如何关闭弹出窗口?