我正在为二进制时间序列分类构建一个这样的模型:
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]
labels <- test_data[[2]]
labels <- labels[, dim(labels)[[2]]]
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)))
labels <- test_data[[2]]
labels <- as.vector(t(as.matrix(labels)))
return(list(preds = preds, labels = labels))
})
我的理解是
return_sequences=TRUE
假的?