Error when checking target: expected dense_2 to have 2 dimensions, but got array with shape (1, 1226, 2)
Here is the code that I am trying to run:
y = Df[['label']]
y_train = np.column_stack((y_train['label']))
y_test = np.column_stack((y_test['label']))
data_dim = 18
timesteps = 1
num_classes = 2
model = Sequential()
model.add(LSTM(19, return_sequences=True,
input_shape=(timesteps, data_dim)))
model.add(LSTM(19, return_sequences=True))
model.add(LSTM(19)) # return a single vector of dimension 30
model.add(Dense(1, activation='softmax'))
model.compile(loss='binary_crossentropy',
optimizer='rmsprop',
metrics=['accuracy'])
model.summary()
model.fit(X_train, y_train, batch_size = 400, epochs = 20, verbose =
accuracy_train = accuracy_score(y_train, model.predict(X_train))
accuracy_test = accuracy_score(y_test, model.predict(X_test))
print('\nTrain Accuracy:{: .2f}%'.format(accuracy_train*100))
print('Test Accuracy:{: .2f}%'.format(accuracy_test*100))
I am getting the following error:
Error when checking target: expected dense_1 to have shape (1,) but got array with shape (1226,)
Model Summary:
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
lstm_37 (LSTM) (None, 1, 19) 2888
_________________________________________________________________
lstm_38 (LSTM) (None, 1, 19) 2964
_________________________________________________________________
lstm_39 (LSTM) (None, 19) 2964
_________________________________________________________________
dense_13 (Dense) (None, 1) 20
=================================================================
Total params: 8,836
Trainable params: 8,836
Non-trainable params: 0
X_train
:
[[[-0.02444971 0.02444971 1. 1. 1.
1. -1. 2. 3. 4.
3. 1. 0. 0.06938705 -0.04329106
0.02458854 0.06025883 0.01439807]]]
[[[ 0.00733477 0.02033006 -1. 1. 1.
1. -1. 0. 1. 2.
1. 0. 0. 0.03837079 -0.00829683
-0.00734757 0.00985466 -0.04543226]]]
y_train
:
[[ 1 1 -1 ... 1 1 -1]]
Solution 1:
It seems you are doing binary classification. Therefore, there are a few things that need to be fixed:
-
The
y_train
should consists of zeros and ones. The following would convert all the-1
labels to zeros:y_train = (y_train == 1).astype('float32')
-
Reshape the labels to have a shape of
(n_samples, 1)
:y_train = y_train.reshape(-1, 1)
-
Use
'sigmoid'
as the activation of last layer:model.add(Dense(1, activation='sigmoid'))