Как исправить размеры входов / выходов Keras LSTM? - PullRequest
0 голосов
/ 21 мая 2019

Моя модель:

model = Sequential()
model.add(Embedding(input_dim=vocab_size,
                    output_dim=1024, input_length=self.SEQ_LENGTH))

model.add(LSTM(vocab_size))

model.add(Dropout(rate=0.5))
model.add(Dense(vocab_size, activation='softmax'))
print(model.summary())

model.compile(loss='sparse_categorical_crossentropy',
              optimizer="adam", metrics=['accuracy'], callbacks=callbacks)

Резюме:

_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
embedding_1 (Embedding)      (None, 100, 1024)         5064704   
_________________________________________________________________
lstm_1 (LSTM)                (None, 4946)              118130264 
_________________________________________________________________
dropout_1 (Dropout)          (None, 4946)              0         
_________________________________________________________________
dense_1 (Dense)              (None, 4946)              24467862  
=================================================================
Total params: 147,662,830
Trainable params: 147,662,830
Non-trainable params: 0
_________________________________________________________________

Но когда я запускаю его, я получаю сообщение об ошибке:

ValueError: Error when checking target: expected dense_1 to have shape (1,) but got array with shape (4945,)

Что мне нужно изменить, чтобы оно лучше совпадало?

1 Ответ

1 голос
/ 21 мая 2019

Не думаю, что ваша модель - это то, что вы хотите:

model.add(LSTM(vocab_size))

Вам не нужен слой LSTM с 4946 нейронами.

model.add(Dense(vocab_size, activation='softmax'))

И я полагаю, вы не хотите предсказывать 4946 классов.

but got array with shape (4945,)

Ваша модель ожидает набор данных, где каждая строка представляет собой список индексов слов, где максимальный индекс - vocab_size.

Что мне нужно изменить, чтобы оно лучше соответствовало? Я думаю, вы должны взглянуть на примеры keras NLP. Это довольно хорошо объяснено.

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