【发布时间】:2019-02-20 22:53:12
【问题描述】:
在 python 中,我正在尝试使用 keras 中的 Sequential 构建神经网络模型来执行二进制分类。请注意,X 是时间序列数据 59x1000x3(样本 x 时间步长 x 特征)的 numpy 数组,D 是 59x100(样本 x 辅助特征)的 numpy 数组。我想通过 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层
我尝试使用合并/连接/功能 api/而不是功能 api 的各种排列,但我一直在着陆时出现某种错误。我已经看到使用来自 keras.engine.topology 的 Merge 的答案。但是,它现在似乎已被弃用。任何在使用 Sequential 时修复错误或如何将代码转换为功能 API 的建议将不胜感激。谢谢。
【问题讨论】:
-
尝试使用
concatenate和小写的c。您可以在此处找到更多相关信息 [keras.io/layers/merge/#concatenate_1] -
请切换到keras功能API。以这种方式实现您的用例要容易得多。顺序模型仅适用于只有一个输入和一个输出的非常简单的模型。
-
感谢您的建议!我重新编写了我的代码以将 concatenate 与 keras 功能 API 一起使用,并且可以正常工作。
标签: python neural-network keras concatenation lstm