【问题标题】:is this correctly work on predict next value in keras?这是否可以正确预测 keras 中的下一个值?
【发布时间】:2019-05-30 16:03:38
【问题描述】:

这是我的代码

...
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)

我编写了以下网站how to use the Keras model to forecast for future dates or events?

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

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

在这段代码中,future 的结果是

但是p = model.predict(x_test) 的 [:4000] 结果是

这两个结果相差很大。

这是预测下一个值的正确方法吗??

不知道是哪里出错了或者代码出错了。

希望你的意见。

完整来源是https://gist.github.com/Lay4U/654f70bd1fb9c4f7d5bdb21ddcb588ab

【问题讨论】:

    标签: python keras lstm


    【解决方案1】:

    根据您的代码,您正在尝试使用 lstm 预测下一个值。 所以在这里你必须正确地重塑你的输入数据以反映时间步长和特征。

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

    您必须编写此代码:

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

    x = 训练数据中的输入特征。

    我想这篇文章会帮助你调整你的代码并预测未来的价值:

    enter link description here

    本文将帮助您更多地了解如何预测未来价值:

    enter link description here

    谢谢

    【讨论】:

      【解决方案2】:

      您可以尝试多种方法。目前没有一种正确的方法。您可以训练一个单独的模型来预测 t+1、t+2 ... t+n。一个 LSTM 模型预测 t+1,而另一个预测 t+n。这称为 DIRMO 策略。

      您的策略(递归策略)特别危险,因为模型可以在多个时间范围内传播错误。

      您可以在本文中找到替代策略的一个很好的比较。 https://www.sciencedirect.com/science/article/pii/S0957417412000528?via%3Dihub

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-01-22
        • 1970-01-01
        • 2020-08-16
        • 1970-01-01
        • 1970-01-01
        • 2021-07-03
        • 2019-06-04
        相关资源
        最近更新 更多