I am having a training data set for a time-series dataset like below where my target variable is
var1(t) which is the value of var 1 at time=t.
import numpy as np import pandas as pd train_df = pd.DataFrame(np.random.randint(0,100,size=(100, 16))) train_df.columns=['var1(t-3)','var2(t-3)','var3(t-3)','var4(t-3)','var1(t-2)','var2(t-2)','var3(t-2)','var4(t-2)','var1(t-1)','var2(t-1)','var3(t-1)','var4(t-1)','var1(t)','var2(t)','var3(t)','var4(t)'] train_X=train_df.drop(['var1(t)'],axis=1) train_y=train_df[['var1(t)']]
I am inputting the LSTM network with the past 3 timesteps
(t-1) of all 4 variables and then feed the output of the LSTM with the current timestep value of the
var2,var3,var4 with an MLP with functional API in Keras.
So I prepared the inputs for the LSTM and MLP like below :
#subset the 3 previous timesteps of the 4 variables for the time sries part train_X_LSTM=train_X[train_X.columns[:12]].reset_index(drop=True).values #target is always var1(t) train_y_LSTM=train_y.values #take the current timestep fatures which are var2,var3,var4 which are realised at t=t train_X_MLP=train_X[train_X.columns[-3:]].reset_index(drop=True).values #target is always var1(t) train_y_MLP=train_y.values
Then I tried the below network :
#lstm input shape lstm_input = Input(shape=(train_X_LSTM.shape,train_X_LSTM.shape)) #lstm units hidden1 = LSTM(10)(lstm_input) hidden2 = Dense(10, activation='relu')(hidden1) #lstm output which will be predicted var1 at t=t lstm_output = Dense(1, activation='sigmoid')(hidden2) #mlp input with additonal 3 variables at t=t mlp_input=Input(shape=(train_X_MLP.shape,train_X_MLP.shape)) #combine the lstm output which is predicted var1 at t=t and key in var2,var3,var4 at t=t x = concatenate([lstm_output, mlp_input], axis=-1) #mlp model output which is predicted var1 at t=t mlp_out = Dense(1, activation='relu')(x) #final output of combined model which is predicted var1 at t=t model = Model(inputs=[lstm_input, mlp_input],outputs=mlp_out) #compile the model model.compile(loss='mae', optimizer='adam') #fit the model model.fit(x_train, y_train, batch_size=64, epochs=10, validation_split=0.2)
This throws the error of
Concatenatelayer requires inputs with matching shapes except for the concat axis. Got inputs shapes: [(None, 1), (None, 100, 3)]
which shows I am not combining them correctly. Any help is appreciated!