首页 > 解决方案 > 使用 tensorflow 和 keras 进行单值 WaveNet 预测

问题描述

在许多使用 ML 模型预测时间序列的示例中,最后一点是绘制预测与测试数据。我知道这是判断模型性能的一种方式。但是一旦部署,我只想使用模型来给我一个(未来的)价值。我想我可以给模型提供过去 X 个样本的数据,它应该只是给我一个 X+1 的预测——一个值还不存在,我将在未来的某个时候与一个实际值进行比较。这是一个示例网络(来自免费的 Udacity 课程):

model = keras.models.Sequential()
model.add(keras.layers.InputLayer(input_shape=[None, 1]))
for dilation_rate in (1, 2, 4, 8, 16, 32):
    model.add(
      keras.layers.Conv1D(filters=32,
                          kernel_size=2,
                          strides=1,
                          dilation_rate=dilation_rate,
                          padding="causal",
                          activation="relu")
    )
model.add(keras.layers.Conv1D(filters=1, kernel_size=1))

然后与测试数据进行比较,通过以下方式创建单个一维预测值数组:

def model_forecast(model, series, window_size):
    ds = tf.data.Dataset.from_tensor_slices(series)
    ds = ds.window(window_size, shift=1, drop_remainder=True)
    ds = ds.flat_map(lambda w: w.batch(window_size))
    ds = ds.batch(32).prefetch(1)
    forecast = model.predict(ds)
    return forecast

cnn_forecast = model_forecast(model, series[..., np.newaxis], window_size)
cnn_forecast = cnn_forecast[split_time - window_size:-1, -1, 0]

发生了一堆我不太清楚的事情 - 向整个数据集添加一个空维度,使用它得到一个预测(大概在整个数据集上),然后在预测的多维输出中过滤掉一些东西......无论如何,这可以工作并产生一维预测值。但是,我想使用我训练过的模型来简单地预测一个值(使用我数据集中的最后一个 window_size 数据)。那怎么能做到呢?

编辑:我会补充一点,我试过这个:

forecast = model_forecast(model, data[-WINDOW_SIZE:, np.newaxis], WINDOW_SIZE)
forecast = forecast[0,-1, 0]

但是 - 我怀疑 - 这是在预测给定 window_size 的所有值。我抓住最后一个预测值,但我不认为这是下一个值,而是对传入的最后一个数据点的预测。我不想预测我传入的值。我想要一个不是现有值的预测。

标签: pythontensorflowmachine-learningkeras

解决方案


推荐阅读