Думаю, эта ссылка поможет вам понять, почему.
Вам всегда нужно давать трехмерный массив в качестве входных данных для вашей сети LSTM. Если первое измерение представляет размер пакета, второе измерение представляет количество временных шагов, которые вы вводите в последовательность. И третье измерение представляет количество единиц в одной входной последовательности. Например, форма ввода выглядит так (batch_size, time_steps, seq_len)
Возьмем вашу примерную последовательность: [10, 20, 30, 40, 50, 60, 70, 80, 90]
После того, как мы выполним split_sequence, как указано в вашей статье, мы получим двумерный вектор признаков X формы (6, 3). Где 6 - количество выборок, а 3 - количество шагов.
, но, учитывая, что модель принимает только трехмерный вектор, мы должны изменить нашу двумерный вектор на трехмерный.
поэтому из (6, 3) -> (6, 3, 1).
Чтобы ответить на ваш второй вопрос, вы можете просто изменить свой двумерный вектор признаков X, выполнив следующие:
# Given that X is a numpy array
samples = X.shape[0]
steps = X.shape[1]
X = X.reshape(samples, steps, 1)