繁体   English   中英

如何合并多个 LSTM 模型并拟合它们

[英]How to merge multiple LSTM models and to fit them

我正在尝试合并两个 LSTM Sequential 模型,但没有成功。 我正在使用tensorflow.keras.layers中的Concatenate()方法。 每当我尝试连接模型时,它会显示ValueError: A Concatenate layer should be called on a list of at least 2 inputs that doesn't sense,因为这两个模型是在列表中传递的。

这是我为模型提供的代码:

# Initialising the LSTM
regressor = Sequential()

# Adding the first LSTM layer and some Dropout regularisation
regressor.add(LSTM(units = 50, return_sequences = True, input_shape = (X_train.shape[1], 1)))
regressor.add(Dropout(0.2))

# Adding a second LSTM layer and some Dropout regularisation
regressor.add(LSTM(units = 50, return_sequences = True))
regressor.add(Dropout(0.2))

# Adding a third LSTM layer and some Dropout regularisation
regressor.add(LSTM(units = 50, return_sequences = True))
regressor.add(Dropout(0.2))

# Adding a fourth LSTM layer and some Dropout regularisation
regressor.add(LSTM(units = 50))
regressor.add(Dropout(0.2))

regressor.add(Dense(units = 1))

lstm_model = Sequential()


lstm_model.add(LSTM(units = 4, activation = 'relu', input_shape = (X_train.shape[1], 1)))

# returns a sequence of vectors of dimension 4

# Adding the output layer
lstm_model.add(Dense(units = 1))


merge = Concatenate([regressor, lstm_model])
hidden = Dense(1, activation = 'sigmoid')
conc_model = Sequential()
conc_model.add(merge)
conc_model.add(hidden)
conc_model.compile(optimizer = 'adam', loss = 'mean_squared_error', metrics=['mae', 'acc'])

history = conc_model.fit(X_train, y_train, validation_split=0.1, epochs = 50, batch_size = 32, verbose=1, shuffle=False)

如何连接和拟合这些模型? 我不明白我做错了什么。

您正在同时使用 Sequential 和 concatenate,这是错误的。

您应该使用 Input 和 Model 关键字来定义 model。

inp_layer1 = Input(shape=(1,))
m1 = Dense(1) (inp_layer1)

inp_layer2 = Input(shape=(1,))
m2 = Dense(1) (inp_layer2)

m3 = concatenate([m1,m2])
model = Model(inputs=[inp_layer1,inp_layer2],outputs=m3)

问题是由您的 fit 输入引起的,它应该是两个输入而不是一个输入的列表,因为您的conc_model需要两个输入

Check the docs of fit function , it says: Input data could be a Numpy array (or array-like), or a list of arrays (in case the model has multiple inputs)

因此,您需要将 X_train 拆分为两个数组的列表,第一个用于regressor ,第二个用于lstm_model

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM