r - 将 LSTM 拟合到时间序列数据时出错



>我有 14 个特征的每日时间序列数据。我有兴趣使用所有特征 1 到 14 预测特征 1(二进制)的提前一步预测。为了做到这一点,我使用 Keras 在 R 中实现了 LSTM 模型。

为了使用 LSTM 层,我将我的训练和验证数据矩阵转换为具有维度的 3D 数组:

> dim(train_x)
[1] 1093    1   14
> dim(valid_x)
[1] 366   1  14

train_y是长度为 1093 的一维向量。此外,train_y等于train_x的第一个输入要素,但它向前滞后 1 个时间步(提前一步预测)。

运行以下代码后:

model <- keras_model_sequential() %>%
layer_lstm(units = 32, input_shape = list(dim(train_x)[[2]], dim(train_x)[[3]])) %>%
layer_dense(units = 1, activation = "sigmoid")
model %>% compile(
optimizer = "rmsprop",
loss = "binary_crossentropy",
metrics = c("accuracy")
)
history <- model %>% fit(
x = train_x,
y = train_y,
steps_per_epoch = 500,
epochs = 20,
validation_data = list(valid_x, valid_y),
shuffle=FALSE
)

网络成功训练,直到第一个纪元几乎结束,然后返回以下错误:

...
453/500 [==========================>...] - ETA: 0s - loss: 0.4137 - acc: 0.8219
461/500 [==========================>...] - ETA: 0s - loss: 0.4125 - acc: 0.8227
469/500 [===========================>..] - ETA: 0s - loss: 0.4113 - acc: 0.8236
477/500 [===========================>..] - ETA: 0s - loss: 0.4101 - acc: 0.8244
485/500 [============================>.] - ETA: 0s - loss: 0.4089 - acc: 0.8252
493/500 [============================>.] - ETA: 0s - loss: 0.4077 - acc: 0.8260
Show Traceback
Rerun with Debug
Error in py_call_impl(callable, dots$args, dots$keywords) : 
TypeError: unsupported operand type(s) for +: 'int' and 'NoneType'

你知道发生了什么吗?我试图用谷歌搜索错误,但我无法弄清楚如何在我的特定情况下修复它。

非常感谢帮助:)

*编辑:如果有帮助,我尝试按照 https://machinelearningmastery.com/multivariate-time-series-forecasting-lstms-keras/的程序进行操作,但代码是用 Python 编写的,这意味着我不确定我是否使用 R 做了所有正确的事情。

我实际上解决了这个问题。出现此问题是因为我错过了fit()中的validation_steps论点。必须将其设置为用于验证的样本数(批量大小)。

最新更新