python - 使用 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 的所有值。我抓住最后一个预测值,但我不认为这是下一个值,而是对传入的最后一个数据点的预测。我不想预测我传入的值。我想要一个不是现有值的预测。
解决方案
推荐阅读
- google-maps - 未处理的异常:PlatformException(error, java.lang.IllegalStateException: Trying to create a already created platform view, view id: 0
- reactjs - create-react-app — 如何将 EXTEND_ESLINT 设置为 true?
- heroku - 使用 CLI 将 jar 文件推送到我的 java heroku 应用程序
- ios - 启动故事板和 iPhone X 安全区域
- asp.net-core - 处理 Razor Pages ASP.NET Core 3.1 ConfigureServices services.AddDbContext<..>(..) 方法中的错误
- docker - Kubeadm init 警告 - 没有可用的验证器
- android - Firestore 根据 2 个字段中的任何一个字段查询文档
- scala - 将breeze.linalg.DenseMatrix[Double] 转换为Scala 中的数据框
- xml - XSLT 文件的 XML 输入限制结果
- tensorflow - 评估 TensorFlow 对象检测模型