Я работаю с Keras, пытаюсь добавить слой Embedding до слоев LSTM. Поэтому мои входные данные больше не являются однозначным представлением и содержат только индексы экземпляров. Вот код:
n_chars = 97
n_in_seq_length = 9
n_out_seq_length = 1
n_batch = 256
n_epoch = 15
model = Sequential()
model.add(Embedding(n_chars, 200, input_length=n_in_seq_length))
model.add(LSTM(200, return_sequences=True))
model.add(LSTM(200, return_sequences=True))
model.add(TimeDistributed(Dense(n_chars, activation='softmax')))
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['categorical_accuracy'])
X, y = np.random.randint(1, 97, (1000,9)), np.random.randint(1, 97, (1000,1))
model.fit(X, y, epochs=n_epoch, batch_size=n_batch)
А вот и сообщение об ошибке:
ValueError: Error when checking target: expected lstm_121 to have 3 dimensions, but got array with shape (1000, 1)
Я пробовал различные решения, такие как добавление слоя RepeatVector
, ни одно из которых не работает. Стоит также отметить, что у меня есть тот же код без слоя Embedding
(передача горячего представления в LSTM), который отлично работает.