это правильно работать на предсказать следующее значение в керасах? - PullRequest
0 голосов
/ 30 мая 2019

вот мой код

...
look_back = 20
train_size = int(len(data) * 0.80)
test_size = len(data) - train_size

train = data[0:train_size]
test = data[train_size:len(data)]
x_train, y_train = create_dataset(train, look_back)
x_test, y_test = create_dataset(test, look_back)

x_train = np.reshape(x_train, (x_train.shape[0], x_train.shape[1], 1))
x_test = np.reshape(x_test, (x_test.shape[0], x_test.shape[1], 1))
y_train=np.repeat(y_train.reshape(-1,1), 20, axis=1).reshape(-1,20,1)
y_test=np.repeat(y_test.reshape(-1,1), 20, axis=1).reshape(-1,20,1)
...
model = Sequential()

model.add(LSTM(512,  return_sequences=True))
model.add(Dropout(0.3))

model.add(LSTM(512,  return_sequences=True))
model.add(Dropout(0.3))

model.add(LSTM(1, return_sequences=True))

model.compile(loss='mean_squared_error', optimizer='rmsprop', metrics=['accuracy'])
model.summary()
model.fit(x_train, y_train, epochs=10, batch_size=64)
p = model.predict(x_test)

, и я хочу предсказать следующее значение Итак, predictions = model.predict(x_train) и форма (62796, 20, 1)

, и я закодировал следующий сайт как использовать модель Keras для прогнозирования будущих дат или событий?

future = []
currentStep = predictions[-20:, :, :] # -20 is last look_back number

for i in range(10):
    currentStep = model.predict(currentStep)
    future.append(currentStep)

в этом коде результат будущего будет

1

, но p = model.predict(x_test) '[: 4000] результат равен

2

Разница между двумя результатами очень велика.

это правильный способ предсказать следующее значение??

Я не знаю, где что-то пошло не так или код неисправен.

Надеюсь на ваше мнение.

Полный источник https://gist.github.com/Lay4U/654f70bd1fb9c4f7d5bdb21ddcb588ab

Ответы [ 2 ]

0 голосов
/ 22 июля 2019

Согласно вашему коду вы пытаетесь предсказать следующее значение, используя lstm.Так что здесь вы должны правильно изменить свои входные данные, чтобы отразить временные шаги и особенности.

model.add(LSTM(512,  return_sequences=True))

вместо этого кода вы должны написать:

model.add(LSTM(512, input_shape=(look_back,x)))

x =входные данные в ваших данных обучения.

Я думаю, эта статья поможет модерировать ваш код и предсказать будущее значение:

введите описание ссылки здесь

Эта статья поможет вам лучше понять, как предсказать будущее значение:

введите описание ссылки здесь

Спасибо

0 голосов
/ 31 мая 2019

Есть несколько способов, которые вы можете попробовать. На данный момент нет единственного правильного пути. Вы можете обучить отдельную модель для прогнозирования t + 1, t + 2 ... t + n. Одна модель LSTM предсказывает t + 1, а другая предсказывает t + n. Это называется стратегией DIRMO.

Ваша стратегия (рекурсивная стратегия) особенно рискованна, потому что модель может распространять ошибку через несколько временных горизонтов.

Вы можете найти хорошее сравнение альтернативных стратегий в этой статье. https://www.sciencedirect.com/science/article/pii/S0957417412000528?via%3Dihub

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...