Заранее прошу прощения, если этот вопрос кажется глупым, но я пытаюсь понять machinelearningmastery блоге о типе LSTM ML алгоритмов, более конкретно о том, как получает реорганизован входные данные. И у меня нет тонны мудрости здесь по этому вопросу или степени CS по этому вопросу
Примерно на полпути в блог о разделе LSTM CNN
, Джейсон говорит о:
Первым шагом является разделение входных последовательностей на подпоследовательности, которые могут обрабатываться моделью CNN. Например, мы можем сначала разделить наши данные одномерные временные ряды в входных / выходных отсчетов с четырьмя шагами в качестве входных данных и один выход, как. Затем каждый образец может быть разделен на два подэлемента, каждый с двумя временными шагами. CNN может интерпретировать каждую подпоследовательность двух временных шагов и предоставлять временные ряды интерпретаций подпоследовательностей для модели LSTM для обработки в качестве входных данных.
Мы можем параметризовать это и определить количество подпоследовательностей как n_seq и число временных шагов на подпоследовательность как n_steps. Входные данные могут быть изменены, чтобы иметь требуемую структуру:
[samples, subsequences, timesteps, features]
1016 * Мой вопроса это требование для данных быть сформированы только в
4 steps
? Или это может быть больше? Приведенный ниже код попытается напечатать массив. Я использую свой собственный пример данных
здесь для своей учетной записи git.
import pandas as pd
import numpy as np
# univariate data preparation
from numpy import array
df = pd.read_csv("trainData.csv")
df = df[['kW']].shift(-1)
df = df.dropna()
raw_seq = df.values.tolist()
# split a univariate sequence into samples
def split_sequence(sequence, n_steps):
X, y = list(), list()
for i in range(len(sequence)):
# find the end of this pattern
end_ix = i + n_steps
# check if we are beyond the sequence
if end_ix > len(sequence)-1:
break
# gather input and output parts of the pattern
seq_x, seq_y = sequence[i:end_ix], sequence[end_ix]
X.append(seq_x)
y.append(seq_y)
return array(X), array(y)
# define input sequence
#raw_seq = [10, 20, 30, 40, 50, 60, 70, 80, 90]
# choose a number of time steps
n_steps = 4
# split into samples
X, y = split_sequence(raw_seq, n_steps)
# reshape from [samples, timesteps] into [samples, subsequences, timesteps, features]
n_features = 1
n_seq = 2
n_steps = 2
X = X.reshape((X.shape[0], n_seq, n_steps, n_features))
# summarize the data
for i in range(len(X)):
print(X[i], y[i])
Приведенный выше код работает, но при изменении n_steps = 7
(из 4) Я получаю эту ошибку формы.
File "convArray.py", line 39, in <module>
X = X.reshape((X.shape[0], n_seq, n_steps, n_features))
ValueError: cannot reshape array of size 2499 into shape (357,2,2,1)
Причина, по которой я хочу попробовать использовать 7 временных шагов, заключается в том, что данные, с которыми я экспериментирую, - это единицы потребления электроэнергии для здания в день, и 7 дней в неделю было бы шагом идеальное время экспериментальное!
1028 * Любые советы высоко оценили