I am working on a project that deals with sensor data. I collected the sensor data from 3 places and stored the data as a csv file. There are about 4000 samples. The goal is to build a classification model on the dataset. Since it is a time series data, I chose using Bidirectional LSTM.
model = keras.Sequential() model.add( keras.layers.Bidirectional( keras.layers.LSTM( units = 128, input_shape = [X_train.shape, X_train.shape] ) ) ) model.add(keras.layers.Dropout(rate = 0.2)) model.add(keras.layers.Dense(units = 128, activation = 'relu')) model.add(keras.layers.Dense(y_train.shape, activation = 'softmax')) model.compile( loss = 'categorical_crossentropy', optimizer = 'adam', metrics = ['acc'] )
After I train my model
history3 = model.fit( X_train, y_train, epochs=35, batch_size=100, validation_split = 0.1, shuffle=False )
Here’s the accuracy and validation accuracy given by my last epoch:
Epoch 35/35 4002/4002 [==============================] - 3s 858us/step - loss: 0.0216 - acc: 0.9948 - val_loss: 0.3026 - val_acc: 0.9056
When I use
model.evaluate(X_test, y_test) it returns a list of two values:
So the question is what are those two values?
My guess is that the first value is MSE and the second is an accuracy. If I am right so why is the accuracy so low when I use
.evaluate? What should I do to improve the model??
print(X_train.shape, y_train.shape, X_test.shape, y_test.shape) (4447, 24, 3) (4447, 3) (473, 24, 3) (473, 3)
The data is ordered data so I use
shuffle = True during split.
df_train, df_test = train_test_split(df, test_size = 0.1, shuffle = True)