在时间序列数据上拟合LSTM时出错

时间:2018-03-21 17:16:47

标签: r keras time-series 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做了一切。

1 个答案:

答案 0 :(得分:0)

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