R / RStudio 中的 Keras - 从张量流数据集中提取标签

问题描述 投票:0回答:1

我有一个图像的张量流测试数据集。我已经使用 CNN 模型对测试数据集进行二元分类 (

predictions
) 进行预测,但需要根据这些预测创建一个混淆矩阵。为此,我需要从我的张量流数据集中提取标签(从我的目录中读取为图像文件的两个文件夹,每个文件夹属于一个类)。直觉上我认为我需要将张量流数据集转换为 R 数组,以便我可以按标签提取图像文件列表(大概这将是与预测的顺序相同的向量),但我找不到使用许多不同的 R-Python 接口包来实现这一点的方法,例如
rTorch
tfdatasets

非常感谢您的帮助!

python r tensorflow keras deep-learning
1个回答
0
投票

我认为没有必要将 TensorFlow 数据集转换为 R 数组来提取标签。 R 中的

tfdatasets
包允许与 TensorFlow 数据集直接交互。您可以迭代数据集并直接从每个批次中提取标签,而无需将数据集转换为 R 数组的中间步骤。

您可以尝试运行与此类似的代码:

library(keras)
library(tfdatasets)
library(caret)

test_dataset <- image_dataset_from_directory(
  "path_to_test_data",
  label_mode = "int",
  batch_size = 32,
  image_size = c(224, 224)
)

# Iterate over the dataset and extract the labels:
# In a real world case it would be better to vectorise 
# the following block. In particular, using c() to 
# build the label vector is not advisable but will 
# suffice for the sake of this example.

get_labels <- function(dataset) {
  labels <- c()
  for (batch in as_iterator(dataset)) {
    batch_labels <- batch[[2]]$numpy()
    labels <- c(labels, batch_labels)
  }
  return(labels)
}

test_labels <- get_labels(test_dataset)

# Make predictions
predicted_labels <- model |>
  predict(test_dataset) |>
  as.array() |>
  (\(x) ifelse(x > 0.5, 1, 0))()

conf_mat <- confusionMatrix(as.factor(predicted_labels), as.factor(test_labels))
© www.soinside.com 2019 - 2024. All rights reserved.