Reputation: 25
I am training a classification network with training data which has X.shape = (1119, 7) and Y.shape = (1119, 6). Below is my simple Keras network with and output dim of 6 (size of labels). The error which is returned is below the code
hidden_size = 128
model = Sequential()
model.add(Embedding(7, hidden_size))
#model.add(LSTM(128, input_shape=(1,7)))
model.add(LSTM(hidden_size, return_sequences=True))
model.add(LSTM(hidden_size, return_sequences=True))
model.add(Dense(output_dim=6, activation='softmax'))
# Compile model
model.compile(loss='categorical_crossentropy',
optimizer='adam',
metrics=["categorical_accuracy"])
ValueError: Error when checking target: expected dense_13 to have shape (None, 6) but got array with shape (6, 1)
I would perfer not to do this in tensorflow because I am just prototyping yet it is my first run at Keras and am confused about why it cannot take this data. I attempted to reshape the data in a number of ways in which nothing worked. Any advice as to why this isn't work would be greatly appreciated.
Upvotes: 0
Views: 77
Reputation: 3588
You should probably remove the parameter return_sequences=True
from your last LSTM layer. When using return_sequences=True
, the output of the LSTM layer has shape (seq_len, hidden_size)
. Passing this on to a Dense layer gives you an output shape of (seq_len, 6)
, which is incompatible with your labels. If you instead omit return_sequences=True
, then your LSTM layer returns shape (hidden_size,)
(it only returns the last element of the sequence) and subsequently your final Dense layer will have output shape (6,)
like your labels.
Upvotes: 1