代码之家  ›  专栏  ›  技术社区  ›  Ai4l2s

在return_sequences=TRUE的中间时间步长上,LSTM精度较差

  •  0
  • Ai4l2s  · 技术社区  · 1 年前

    我正在为二进制时间序列分类构建一个这样的模型:

    model <- keras_model_sequential() %>%
        layer_lstm(units = 256, input_shape = list(NULL, n_features),
                   return_sequences = TRUE, dropout = 0.1, recurrent_dropout = 0.4) %>%
        layer_lstm(units = 256, return_sequences = TRUE, dropout = 0.1, recurrent_dropout = 0.4) %>%
        layer_dense(units = 128) %>%
        layer_dense(units = 1, activation = "sigmoid")
    

    然后,在训练过程中,创建一批128个实例,这些实例具有相同的长度,即回溯的数量,并且对于每个回溯,在我的目标向量中都有一个类。例如,第一批具有以下尺寸 x=(1:128,1:8,1:55) , y=(1:128,1:8,1)

    训练后,我计算 精确 ROC 基于测试数据。首先,我只取序列的最后一个预测和标签。这给了我 ACC=0.78,ROC=0.87 。 所以我这样计算我的预测/标签:

    ret <- lapply(1:max_index, function(i) {
      test_data <- test_gen()
      preds <- predict(model, test_data[[1]], batch_size = dim(test_data[[1]])[[1]])
      preds <- preds[, dim(preds)[[2]], 1] # take last predictions
      labels <- test_data[[2]]
      labels <- labels[, dim(labels)[[2]]] # take last label
      return(list(preds = preds, labels = labels))
    })
    

    然而,当我计算序列中每个时间步长的预测和标签的度量时,模型似乎没有学到任何东西,因为 ACC和ROC约为0.5

    ret <- lapply(1:max_index, function(i) {
      test_data <- test_gen()
      preds <- predict(model, test_data[[1]], batch_size = dim(test_data[[1]])[[1]])
      preds <- as.vector(t(as.matrix(preds))) # take all predictions
      labels <- test_data[[2]]
      labels <- as.vector(t(as.matrix(labels))) # take all labels
      return(list(preds = preds, labels = labels))
    })
    

    我的理解是 return_sequences=TRUE 假的?

    0 回复  |  直到 1 年前