Python Keras多个输入层-如何连接/合并?

时间:2018-09-17 03:55:07

标签: python neural-network keras concatenation lstm

在python中,我试图在keras中使用Sequential建立神经网络模型以执行二进制分类。请注意,X是时间序列数据59x1000x3的numpy数组(样本x时间步长x特征),而D是59x100的numpy数组(样本x辅助特征)。我想将时间序列传递给lstm层,然后在随后的层中增加伴随的功能(即,将两层连接起来)。

我适合模型的代码如下:

def fit_model(X, y, D, neurons, batch_size, nb_epoch):
    model = Sequential()
    model.add(LSTM(units = neurons, input_shape = (X.shape[1], X.shape[2]))
    model.add(Dropout(0.1))
    model.add(Dense(10))
    input1 = Sequential()
    d = K.variable(D)
    d_input = Input(tensor=d)
    input1.add(InputLayer(input_tensor=d_input))
    input1.add(Dropout(0.1))
    input1.add(Dense(10))
    final_model = Sequential()
    merged = Concatenate([model, input1])
    final_model.add(merged)
    final_model.add(Dense(1, activation='sigmoid'))
    final_model.compile(loss = 'binary_crossentropy', optimizer = 'adam')
    final_model.fit(X, y, batch_size = batch_size, epochs = nb_epoch)
    return final_model

我收到以下错误:

  

ValueError:应该在至少2个输入的列表上调用Concatenate

我尝试使用merge / concatenate / function api /而不是functional api的各种排列,但是我一直着陆并出现某种错误。我已经使用keras.engine.topology中的Merge看到了答案。但是,现在似乎已弃用。任何使用Sequential修复错误或如何将代码转换为功能性API的建议都将受到赞赏。谢谢。

2 个答案:

答案 0 :(得分:0)

您使用连接图层的方式是错误的。 Concatenate仅采用一个参数作为串联轴。要在另一个张量上调用该层,应在张量列表上调用连接的层对象。

merged = Concatenate(axis=-1)([model, input1])

这应该可以解决您的问题。

答案 1 :(得分:0)

您错误地将模型和输入作为连接层的参数传递:

merged = Concatenate([model, input1])

尝试传递另一个输入层:

merged = Concatenate([input1, input2])