我正在使用R方法(fitting RNNs to time series data)跟踪Chollet的深度学习,以便拟合RNN进行时间序列预测 .
model <- keras_model_sequential() %>%
layer_gru(units = 32,
dropout = 0.1,
recurrent_dropout = 0.5,
return_sequences = TRUE,
input_shape = list(NULL, dim(data)[[-1]])) %>%
layer_gru(units = 64, activation = "relu",
dropout = 0.1,
recurrent_dropout = 0.5) %>%
layer_dense(units = 1)
model %>% compile(
optimizer = optimizer_rmsprop(),
loss = "mae"
)
history <- model %>% fit_generator(
train_gen,
steps_per_epoch = 500,
epochs = 40,
validation_data = val_gen,
validation_steps = val_steps
)
在这里,使用以下方法生成训练,验证和测试数据:
lookback <- 1440
step <- 6
delay <- 144
batch_size <- 128
train_gen <- generator(
data,
lookback = lookback,
delay = delay,
min_index = 1,
max_index = 200000,
shuffle = TRUE,
step = step,
batch_size = batch_size
)
val_gen = generator(
data,
lookback = lookback,
delay = delay,
min_index = 200001,
max_index = 300000,
step = step,
batch_size = batch_size
)
test_gen <- generator(
data,
lookback = lookback,
delay = delay,
min_index = 300001,
max_index = NULL,
step = step,
batch_size = batch_size
)
# How many steps to draw from val_gen in order to see the entire validation set
val_steps <- (300000 - 200001 - lookback) / batch_size
# How many steps to draw from test_gen in order to see the entire test set
test_steps <- (nrow(data) - 300001 - lookback) / batch_size
在此之后,我阅读了Keras文档并找到了预测功能 . 要查找测试数据的预测:
m <- model %>% evaluate_generator(test_gen, steps = test_steps)
m
但是,它仅给出测试数据的损失值 .
我的问题是,如何获得测试数据集中每个点的预测,就像我们可以获得其他时间序列方法一样?如何绘制这些预测值和实际值?
1 回答
在我看来,你需要重新定义
generator
,你需要只获得samples
作为输出 . 按照你的例子:现在你可以拨打
predict_generator
:但是现在你需要对这些变量进行去标准化,因为你在拟合之前缩放了每个变量 .
请注意,
std
和mean
应仅在T (degC)
数据上的T (degC)
上进行计算,否则您将过度拟合 .