LSTM Текстовая генерация Input_shape

#python #tensorflow #machine-learning #keras

#python #тензорный поток #машинное обучение #keras

Вопрос:

Я пытаюсь добавить еще один слой LSTM в свою модель, но я только новичок, и у меня не очень хорошо получается. Я использую (лучше) — твиты Донала Трампа! набор данных в Kaggle для генерации текста LSTM.

Я изо всех сил пытаюсь запустить его, поскольку он возвращает ошибку:

 <ValueError: Input 0 of layer lstm_16 is incompatible with the layer: expected ndim=3, found ndim=2. Full shape received: [None, 128]>
 

Моя модель:

 print('Building model...')
model2 = Sequential()
model2.add(LSTM(128, input_shape=(maxlen, len(chars)),return_sequences=True))
model2.add(Dropout(0.5))
model2.add(LSTM(128))
model2.add(Dropout(0.5))
model2.add(LSTM(128))
model2.add(Dropout(0.2))
model2.add(Dense(len(chars), activation='softmax'))

# optimizer = RMSprop(lr=0.01)
optimizer = Adam()
model.compile(loss='categorical_crossentropy', optimizer=optimizer)
print('model built')
 

Модель работает только с двумя слоями LSTM, двумя выпадающими слоями и одним плотным слоем. Я думаю, что что-то не так с моей настройкой для input_shape, но я могу ошибаться. Моя модель основана на записной книжке из приведенного выше набора данных notebook.

Ответ №1:


Для того, чтобы сложить RNN, вам нужно будет использовать return_sequences=True . Из ошибки видно, что слой ожидал 3 dimentional tensor , но получил 2 dimentional . Здесь вы можете прочитать, что этот return_sequences=True флаг будет выводить 3 dimentional тензор.

Если True, возвращается полная последовательность последовательных выходных данных для каждого временного шага (трехмерный тензор формы (batch_size, timesteps, output_features)).

Предполагая, что с вашим входным слоем нет проблем и входные данные передаются правильно, я предложу попробовать следующую модель.

 print('Building model...')
model2 = Sequential()
model2.add(LSTM(128, input_shape=(maxlen, len(chars)),return_sequences=True))
model2.add(Dropout(0.5))
model2.add(LSTM(128, return_sequences=True))
model2.add(Dropout(0.5))
model2.add(LSTM(128))
model2.add(Dropout(0.2))
model2.add(Dense(len(chars), activation='softmax'))

# optimizer = RMSprop(lr=0.01)
optimizer = Adam()
model.compile(loss='categorical_crossentropy', optimizer=optimizer)
print('model built')
 

Комментарии:

1. привет, спасибо за помощь. однако я получил следующую ошибку. <Ошибка типа: add() получил неожиданный аргумент ключевого слова ‘return_sequences’>. вы случайно не знаете, что может быть причиной? он должен работать, поскольку return_sequences указан в документации как принятое ключевое слово, но по какой-то причине ему не нравится ввод. но это решило другую ошибку.

2. У меня была опечатка, я обновил ответ, попробуйте еще раз. теперь это должно сработать.