Подвижное окно подход для DNN - PullRequest
0 голосов
/ 26 июня 2019

Я пытаюсь реализовать подход с раздвижными окнами и использовать DNN для прогнозирования.Длина окна = 24

Что я сделал: у меня есть x (вход) и y (выход) в наборе данных.Я сохранил значение "y" как есть (один массив).И для значения x:

def generate_input(data, sequence_length=1):
    x_data = []
    for i in range(len(data)-sequence_length+1):
        a = data[i:(i+sequence_length)]
        x_data.append(a)
    return np.array (x_data)

sequence_length = 24
x_train = generate_input(train, sequence_length)

#Shape of X train: (201389, 24)
#Shape of y train: (201412,)

model = Sequential()
model.add(Dense(30,input_shape= (x_train.shape[1],)))
model.add(Dense(20))
model.add(Dropout(0.2))
model.compile(loss="mse", optimizer='rmsprop')
model.summary()
model.fit(x_train, y_train, batch_size=batch_size, epochs=epochs, 
validation_split=0.1)

Полученное сообщение об ошибке:

Error when checking target: expected dropout_5 to have shape (20,) but got 
array with shape (1,)

Еще один вопрос, как я могу использовать тот же подход для многомерных временных рядов?Я хочу использовать последовательности в качестве входных данных для прогнозирования y.

Я изменил часть нарезки на:

x_data.append(data[i:i+sequence_length])

Но я получил ошибку:

невозможно скопировать последовательность размером 24 на ось массива с размером 4

1 Ответ

0 голосов
/ 26 июня 2019

model.summary() должно показать вам, что выходной слой в вашей модели - это слой Dropout с формой (Нет, 20).Это, вероятно, не то, что вы хотите.Кажется, вы пытаетесь предсказать единственное значение.Таким образом, вам нужно добавить слой Dense(1) после.Также крайне необычно иметь выпадение в качестве выходного слоя.

Кроме того, x_train и y_train должны иметь одинаковую форму [0].

...