我有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做了一切。
答案 0 :(得分:0)
我实际上解决了这个问题。出现此问题是因为我错过了validation_steps
中的fit()
参数。必须将其设置为用于验证的样本数(批量大小)。