Я пробую разные архитектуры нейронных сетей для НЛП на основе слов.
До сих пор я использовал двунаправленные, встроенные и модели с GRU, руководствуясь этим руководством: https://towardsdatascience.com/language-translation-with-rnns-d84d43b40571и все получилось хорошо. Однако, когда я попытался использовать LSTM, я получаю сообщение об ошибке:
логиты и метки должны иметь одно и то же первое измерение, иметь форму логитов [32,186] и форму меток [4704]
Как я могу решить это?
Мой исходный и целевой набор данных состоит из 7200 выборочных предложений. Они целочисленные токены и встраиваются. Исходный набор данных пост-дополнен, чтобы соответствовать длине целевого набора данных.
Вот моя модель и соответствующий код:
lstm_model = Sequential()
lstm_model.add(Embedding(src_vocab_size, 128, input_length=X.shape[1], input_shape=X.shape[1:]))
lstm_model.add(LSTM(128, return_sequences=False, dropout=0.1, recurrent_dropout=0.1))
lstm_model.add(Dense(128, activation='relu'))
lstm_model.add(Dropout(0.5))
lstm_model.add((Dense(target_vocab_size, activation='softmax')))
lstm_model.compile(optimizer=Adam(0.002), loss='sparse_categorical_crossentropy', metrics=['accuracy'])
history = lstm_model.fit(X, Y, batch_size = 32, callbacks=CALLBACK, epochs = 100, validation_split = 0.25) #At this line the error is raised!
С формами:
- X.shape = (7200, 147)
- Y.shape = (7200, 147, 1)
- src_vocab_size = 188
- target_vocab_size = 186
Я уже встречался с похожим вопросом здесьи попытался добавить слой Reshape
simple_lstm_model.add(Reshape((-1,)))
, но это вызывает только следующую ошибку:
"TypeError: __int__ вернул не-int (тип NoneType)"
Это действительно странно, так как я предварительно обрабатываю набор данных одинаково для всех моделей, и он работает просто отлично, за исключением вышеперечисленного.