我有一个图像的张量流测试数据集。我已经使用 CNN 模型对测试数据集进行二元分类 (
predictions
) 进行预测,但需要根据这些预测创建一个混淆矩阵。为此,我需要从我的张量流数据集中提取标签(从我的目录中读取为图像文件的两个文件夹,每个文件夹属于一个类)。直觉上我认为我需要将张量流数据集转换为 R 数组,以便我可以按标签提取图像文件列表(大概这将是与预测的顺序相同的向量),但我找不到使用许多不同的 R-Python 接口包来实现这一点的方法,例如rTorch
、tfdatasets
等
非常感谢您的帮助!
我认为没有必要将 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))