【问题标题】:How to merge multiple LSTM models and to fit them如何合并多个 LSTM 模型并拟合它们
【发布时间】:2020-12-11 12:47:20
【问题描述】:

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

这是我的模型代码:

# 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)

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

【问题讨论】:

  • 尝试拟合模型时是否出错?
  • 是的,看起来很合适
  • 你X_train是单数组吗?你有 2 个输入,那么 X_train 的形状是什么
  • 是的,X_Train 是一个数组

标签: python tensorflow keras deep-learning lstm


【解决方案1】:

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

检查docs of fit function,它说:输入数据可以是 Numpy 数组(或类似数组),或数组列表(以防模型有多个输入)

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

【讨论】:

  • 它失败了
  • 你能举一个X_train的例子吗?我尝试了 X_train = train_test_split(regressor, lstm_model) 然后只添加了 X_train ,但它没有用
  • 这取决于您的X_train 结构和类型是什么,如果您的X_train 结构和类型像numpy 数组或张量一样常见,则需要将X_train 拆分为[<array, shape=(batch size, X_train.shape[1], 1)>, <array, shape=(batch size, X_train.shape[1], 1)>] ,那么您可以在官方文档或在线任何地方轻松找到您需要的功能,如果不是,请在stackoverflow上提出另一个问题
【解决方案2】:

你同时使用 Sequential 和 concatenate,这是错误的。

你应该使用 Input 和 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)

【讨论】:

  • 据我所知concatenate用于功能API,不能与Sequential一起使用,Concatenate可以与Sequential一起使用
  • 我的代码正在运行,但是当我连接 2 sequential 模型时它不起作用。
  • 它不适用于concatenate 它应该适用于Concatenate
猜你喜欢
  • 1970-01-01
  • 2022-01-25
  • 1970-01-01
  • 1970-01-01
  • 2021-12-08
  • 2021-09-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多