guillaume-chevalier / LSTM-Human-Activity-Recognition

Human Activity Recognition example using TensorFlow on smartphone sensors dataset and an LSTM RNN. Classifying the type of movement amongst six activity categories - Guillaume Chevalier
MIT License
3.35k stars 938 forks source link

LSTM model is giving an ValueError while predicting based on X_test data #44

Open mayupova opened 2 years ago

mayupova commented 2 years ago

Hi need a help to solve value erorr wile running LSTM. It seems everything works fine on training data but prediction generates less then expected dimensions my x_train data shape is (846, 30, 3), my y_train data shape is (846,) my x_test 363, 30, 3), my y_test (363) hat = modell.predict(test_X) generates (363, 100)

part of the code

reshape input to be 3D [samples, timesteps, features]

train_X = tr_xval.reshape((tr_xval.shape[0], 30, 3)) test_X = ts_xval.reshape((ts_xval.shape[0], 30, 3)) train_y=tr_yval test_y=ts_yval print(train_X.shape, train_y.shape, test_X.shape, test_y.shape)

design network

modell = Sequential() modell.add(LSTM(200, activation='relu',input_shape=(train_X.shape[1], train_X.shape[2]),return_sequences=False,stateful=False))

model.add(LSTM(neurons, batch_input_shape=(batch_size, X.shape[1], X.shape[2]), stateful=True))

modell.add(Dense(100, activation='relu')) modell.compile(loss='mae', optimizer='adam',metrics=['accuracy']) modell.summary()

fit network

history = modell.fit(train_X, train_y, epochs=200, batch_size=72, validation_data=(test_X, test_y), verbose=2, shuffle=False)

works fin until here but then

yhat = modell.predict(test_X)

from sklearn.preprocessing import MinMaxScaler scaler = MinMaxScaler(feature_range=(0, 1)) values=lnorm.values.astype('float32') scaled = scaler.fit_transform(values)

invert scaling for forecast

inv_yhat = np.concatenate((yhat, test_X[:, -2:]), axis=1) inv_yhat = scaler.inverse_transform(inv_yhat) inv_yhat = inv_yhat[:,0]

invert scaling for actual

test_y = test_y.reshape((len(test_y), 1)) inv_y = np.concatenate((test_y, test_X[:, -2:]), axis=1) inv_y = scaler.inverse_transform(inv_y) inv_y = inv_y[:,0]


ValueError Traceback (most recent call last) C:\Users\M55F1~1.AYU\AppData\Local\Temp/ipykernel_7572/1751946881.py in 5 6 # invert scaling for forecast ----> 7 inv_yhat = np.concatenate((yhat, test_X[:, -2:]), axis=1) 8 inv_yhat = scaler.inverse_transform(inv_yhat) 9 inv_yhat = inv_yhat[:,0]

<__array_function__ internals> in concatenate(*args, **kwargs) ValueError: all the input arrays must have same number of dimensions, but the array at index 0 has 2 dimension(s) and the array at index 1 has 3 dimension(s)
xaxfan commented 2 years ago

来信已收到,谢谢!