ValueError:输入0与层lstm_2不兼容:预期ndim = 3,找到的ndim = 4-多元时间序列数据

时间:2019-01-16 23:13:18

标签: r keras time-series lstm

我有包含100,000行的多元时间序列数据,目前有32个要素(这些要素将在以后减少)。

我已经尝试使用layer_flatten。正如其他人在github上建议的那样。不幸的是对我没用。

当我尝试构建keras模型时会生成错误。

这是我的代码:

lstm_v1 <- keras_model_sequential() %>% 
  layer_lstm(units = 32, input_shape = c(nrow(data), 1, ncol(data)), batch_size = nrow(data), return_sequences = T) %>%
  layer_dense(units = 1, activation = "sigmoid")

lstm_v1 %>% compile(
  loss = 'binary_crossentropy', 
  optimizer = 'rmsprop', 
   metrics = c('accuracy')
)

summary(lstm_v1)

hist_lstm_v1 <- lstm_v1 %>% fit(
  x = as.matrix(data), y = km_dt$cluster, batch_size = nrow(spg_tt_1_scaled), verbose = 2
)

1 个答案:

答案 0 :(得分:1)

Keras LSTM层期望输入3的颜色像(batch_size, seq_length, input_dims)一样暗淡,但您将其分配错误。试试这个

layer_lstm(units = 32, input_shape = c(seq_length, 32), batch_size = batch_size, return_sequences = T)

您需要将数据重塑为三个暗角,其中新的暗角将代表顺序数据。

我使用玩具数据集演示了一个示例,此处的数据和标签最初使用以下脚本来构成((150, 32), (150,))形状:

seq_length = 10 # choice
dataX = []
dataY = []
for i in range(0, 150 - seq_length, 1):
    dataX.append(data[i:i+seq_length])
    dataY.append(labels[i+seq_length-1])
import numpy as np
dataX = np.reshape(dataX, (-1, seq_length, 32))
dataY = np.reshape(dataY, (-1, 1))
# dataX.shape, dataY.shape

输出:((140, 10, 32), (140, 1))

现在您可以安全地将其输入模型了。