Как произвести 1 вывод с несколькими входными переменными LSTM - PullRequest
1 голос
/ 31 января 2020

Я пытаюсь предсказать цену открытия на следующий день. Я могу получить правильное форматирование для подачи на входе, т. Е. («Open», «High» столбцы в день в течение n раз). Однако, когда я форматирую в 3D-массив, моя форма выглядит следующим образом:

(1200, 60, 2)

X_train имеет 1200 выборок, с 60 временными шагами (предыдущие 60 дней исторических данных) и 2 функциями (открытыми и высокими)

Однако моя проблема возникает, когда она достигает части кодирования keras при реализации слоев. Это мой код, который я использую:

regressor.add(LSTM(units = 50, return_sequences = True, input_shape = (X_train.shape[1], 2)))
regressor.add(Dropout(0.2))

regressor.add(LSTM(units = 50, return_sequences = True))
regressor.add(Dropout(0.2))

regressor.add(LSTM(units = 50, return_sequences = True))
regressor.add(Dropout(0.2))

regressor.add(LSTM(units = 50))
regressor.add(Dropout(0.2))

regressor.add(Dense(units = 1))

Проблема возникает с последней строкой. Я хочу, чтобы выходные данные были только 1. Поэтому, по сути, я хочу, чтобы значения Open и High входных рядов использовались для выработки окончательного единичного вывода только цены Open. Однако, установив Dense(units = 1), создается эта ошибка:

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

Чтобы исправить это, я попытался изменить его на 2 Dense(units=2), однако в конечном результате на графике выводятся 2 строки, одна для открытого и один для высокого, который не то, что я хочу Это 2 выхода, где я хочу 1. Я не уверен, что делать с этим сценарием.

regressor.summary ()

Model: "sequential_1"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
lstm_1 (LSTM)                (None, 60, 50)            10600     
_________________________________________________________________
dropout_1 (Dropout)          (None, 60, 50)            0         
_________________________________________________________________
lstm_2 (LSTM)                (None, 60, 50)            20200     
_________________________________________________________________
dropout_2 (Dropout)          (None, 60, 50)            0         
_________________________________________________________________
lstm_3 (LSTM)                (None, 60, 50)            20200     
_________________________________________________________________
dropout_3 (Dropout)          (None, 60, 50)            0         
_________________________________________________________________
lstm_4 (LSTM)                (None, 50)                20200     
_________________________________________________________________
dropout_4 (Dropout)          (None, 50)                0         
_________________________________________________________________
dense_1 (Dense)              (None, 2)                 102       
=================================================================
Total params: 71,302
Trainable params: 71,302
Non-trainable params: 0

1 Ответ

1 голос
/ 31 января 2020

Когда плотный слой имеет ошибку формы, это может быть тензор метки, который не совпадает. Убедитесь, что y_train имеет форму [1200, 1], чтобы вы могли использовать плотность 1.

...