在具有Tensorflow后端的Keras上,在不同的输入部分上并行安装LSTM和一些密集层

时间:2018-04-28 09:51:28

标签: python tensorflow merge keras lstm

我正在进行回归预测,其中我有一些复杂的3D序列和一些解释序列的一些关键特征的功能。它们被保存在两个具有这种形状的矩阵中:

X1.shape, X2.shape
((9000, 300, 3), (9000, 106))

我想将它们提供给Model实例,其中X1矩阵由LSTM处理,X2矩阵由几个密集层处理。我的计划是在输出层之前合并它们。

我打算通过以下方式训练:

model.fit(zip(X1, X2), y, batch_size=BATCH, epochs=EPOCHS, validation_split=0.2)

如何构建模型以接收两个矩阵并单独处理它们?

目前我只有LSTM的标准模型:

def model(sample_size=300, axis=3):
    inp=Input(shape=(sample_size, axis))
    x=LSTM(50, return_sequences=True)(inp)
    x=GlobalMaxPool1D(x)
    x=Dense(1)(x)
    model=Model(inputs=inp, ouputs=x)
    model.compile(loss='mean_squared_error', optimizer='adam',
                  metrics= ['mae'])
   return model

1 个答案:

答案 0 :(得分:2)

我认为这应该有用

# First input
input1=Input(shape=(300,3))
x=LSTM(50, return_sequences=True)(input1)
x=GlobalMaxPool1D(x)
x=Dense(n)(x)

# Second Input
input2=Input(shape=(106))
y=Dense(n)(input2)

# Merge
merged=Concatenate([x,y])
merged=Dense(1)(merged)

# Define model with two inputs
model=Model(inputs=[input1,input2],outputs=merged)

两个模型在合并之前应该具有相同的输出空间。然后,您可以传递输入列表,Keras会在适当的位置传递它

model.fit([X1,X2],....)