Плотный ожидает 2d, но получил 3D в LSTM - PullRequest
2 голосов
/ 24 сентября 2019

В моей модели

Xtrain shape : (62, 30, 100)
Ytrain shape : (62, 1, 100)
Xtest shape : (16, 30, 100)
Ytest shape : (16, 1, 100)

Когда я строю свою модель,

model = Sequential()
model.add(LSTM(units=100, return_sequences= True, input_shape=(x_train.shape[1],X_train.shape[2])))
model.add(LSTM(units=100, return_sequences=True))
model.add(Dense(units=100))

model.fit(x_train,y_train,epochs=5,batch_size=13)

, когда я пытаюсь подогнать ее, выдает ошибку,

ValueError: Error when checking target: expected dense_1 to have 2 dimensions, but got array with shape (62, 1, 100)

Iнужно прогнозировать на следующую 1 отметку времени для всех 100 функцийКакие изменения необходимо сделать?

Ответы [ 2 ]

1 голос
/ 24 сентября 2019

Отправленный код не похож на тот, который вызвал ошибку.

Распечатайте model.summary().Вы увидите:

  • LSTM 1: (Нет, 30, 100)
  • LSTM 2: (Нет, 30, 100)
  • Плотность: (Нет,30, 100)

Вы не использовали ничего, чтобы уменьшить количество временных шагов до 1. Ваше сообщение об ошибке, согласно этой модели, должно определенно жаловаться на попытку (None, 30, 100) против (62, 1, 100),

Чтобы исключить временные шаги, вам нужно return_sequences=False в последнем LSTM, чтобы ваша модель стала:

  • (Нет, 30, 100)
  • (Нет, 100)
  • (Нет, 100)

Таким образом, вы можете иметь Ytrain.shape == (62,100)

Если вам действительно нужно это среднее измерение == 1,просто используйте Lambda(lambda x: K.expand_dims(x, 1)) после плотного.

0 голосов
/ 26 сентября 2019

Если вы хотите, чтобы результат каждого шага LSTM обрабатывался отдельно (наиболее распространенный способ размещения плотного слоя после LSTM или других RNN), вам нужно обернуть его следующим образом:

model = Sequential()
model.add(LSTM(units=100, return_sequences= True, input_shape=(x_train.shape[1],X_train.shape[2])))
model.add(LSTM(units=100, return_sequences=True))
model.add(TimeDistributed(Dense(units=100)))

Каждый вывод будет обслуживаться отдельно для плотного слоя (конечно, это будет один и тот же слой - все веса будут распределены между каждым его «экземпляром»).

...