Опция Keras "return_sequence" возвращает 2D-массив вместо 3D - PullRequest
0 голосов
/ 24 июня 2018

Я пытаюсь использовать простую модель Keras на уровне символов для извлечения ключевого текста из предложения.

Я передаю x_train дополненную последовательность dim (n_examples, 500), представляющую все предложение, и y_train, дополненную последовательность dim (n_examples, 100), представляющую импортируемый текст для извлечения.

Я пробую простую модель, подобную такой:

vocab_size = 1000
src_txt_length = 500
sum_txt_length = 100
inputs = Input(shape=(src_txt_length,))

encoder1 = Embedding(vocab_size, 128)(inputs)
encoder2 = LSTM(128)(encoder1)
encoder3 = RepeatVector(sum_txt_length)(encoder2)

decoder1 = LSTM(128, return_sequences=True)(encoder3)
outputs = TimeDistributed(Dense(100, activation='softmax'))(decoder1)

model = Model(inputs=inputs, outputs=outputs)
model.compile(loss='categorical_crossentropy', optimizer='adam')

Когда я пытаюсь обучить ее с помощью следующего кода:

hist = model.fit(x_train, y_train, verbose=1, validation_data=(x_test, y_test), batch_size=batch_size, epochs=5)

Я получаю ошибку:

ValueError: Error when checking target: expected time_distributed_27 to have 3 dimensions, but got array with shape (28500, 100)

Мой вопрос таков: у меня на последнем слое LSTM для параметра return_sequence установлено значение True, но плотный полностью подключенный слой говорит мне, что вход является двухмерным.

Что я здесь не так делаю?Любая помощь будет принята с благодарностью!

1 Ответ

0 голосов
/ 24 июня 2018

Не жалуется на ввод TimeDistributed, но цель y_train.shape == (n_examples, 100), которая не является 3D. У вас есть несоответствие между предсказанием последовательности и одной точки. Другими словами, outputs - это 3D, а y_train - это 2D.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...