keras 如何修改天气预测的时间序列预测示例以增加预测数量?

zwghvu4y  于 2023-01-26  发布在  其他
关注(0)|答案(1)|浏览(194)

(And将它们全部绘制在同一图中)。
我一直在关注"天气预报的时间序列预报"代码,在这里找到:
https://keras.io/examples/timeseries/timeseries_weather_forecasting/
文章说:
"上面的训练模型现在能够对验证集中的5组值进行预测。"
它使用下面的代码来获取预测值并绘制它们:

def show_plot(plot_data, delta, title):
    labels = ["History", "True Future", "Model Prediction"]
    marker = [".-", "rx", "go"]
    time_steps = list(range(-(plot_data[0].shape[0]), 0))
    if delta:
        future = delta
    else:
        future = 0

    plt.title(title)
    for i, val in enumerate(plot_data):
        if i:
            plt.plot(future, plot_data[i], marker[i], markersize=10, label=labels[i])
        else:
            plt.plot(time_steps, plot_data[i].flatten(), marker[i], label=labels[i])
    plt.legend()
    plt.xlim([time_steps[0], (future + 5) * 2])
    plt.xlabel("Time-Step")
    plt.show()
    return

for x, y in dataset_val.take(5):
    show_plot(
        [x[0][:, 1].numpy(), y[0].numpy(), model.predict(x)[0]],
        12,
        "Single Step Prediction",
    )

在我的计算机中,为了将序列下采样至1小时......我直接修改了输入数据的频率,并使用"sampling_rate = 1",而不是使用"sampling_rate = 6"
现在,考虑到模型拟合正确...如果我想获得未来500个间隔的预测,而不是仅5个间隔,我需要修改什么?
dataset_val.take(500)
或者别的什么?
开头的配置还说:

split_fraction = 0.715
train_split = int(split_fraction * int(df.shape[0]))
step = 6
past = 720  
future = 72
learning_rate = 0.001
batch_size = 256
epochs = 10

我现在需要为过去和未来使用什么值(如果我的数据频率为1小时,并且我想预测未来500点?)
未来= 500
past =?(似乎是用于训练的向后时间戳数量)
δ值呢?它固定在12,但似乎是未来的值。

p3rjfoxz

p3rjfoxz1#

据消息来源说
https://github.com/keras-team/keras-io/blob/master/examples/timeseries/timeseries_weather_forecasting.py,这是型号

inputs = keras.layers.Input(shape=(inputs.shape[1], inputs.shape[2]))
lstm_out = keras.layers.LSTM(32)(inputs)
outputs = keras.layers.Dense(1)(lstm_out)

model = keras.Model(inputs=inputs, outputs=outputs)
model.compile(optimizer=keras.optimizers.Adam(learning_rate=learning_rate), loss="mse")
model.summary()

如你所见,它使用1个单位的密度作为最后一层。例如,如果你想要2个预测,你应该使用2个单位的密度(作为最后一层),并且应该小心(X_train,Y_train)和(X_Validation,Y_Validation)的输入形状,因为你期望的Y作为默认值有1个单位,所以你可能应该转换它。简单的例子默认值X:1,Y:1更改为X:1,Y:1,2
并且可能Y个数据应该被移位(N),其中N正好是最后一层中的单元数(密集)。
如果你只是想预测一个更大的时间框架,你可以把你的整个数据转换成更大的一个。例如,我们的默认时间框架和数据(天气)是每小时。然后,我们可以把我们的数据转换成每日(这是x24),然后我们可以预测每日或同样的事情(X30),我们可以预测每月,等等。

相关问题