#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. У меня была опечатка, я обновил ответ, попробуйте еще раз. теперь это должно сработать.