我在Keras使用ImageDataGenerator(),我想得到整个测试数据的标签。
目前我正在使用以下代码来完成此任务:
test_batches = ImageDataGenerator().flow_from_directory(...)
test_labels = []
for i in range(0,3):
test_labels.extend(np.array(test_batches[i][1]))
此代码只能起作用,因为我知道我总共有150张图像,而我的批量大小定义为50。
此外使用:
imgs, labels = next(test_batches)
如本主题的类似帖子中所建议,仅返回一个批次的标签而不是整个数据集。因此,我想知道是否有一种比我上面使用的方法更有效的方法。
答案 0 :(得分:1)
我知道flow
方法允许传递图像和标签。但是你需要将你的图像加载到内存中。
我从未尝试使用flow_from_directory
,但是如果你查看documentation,他们似乎要求你为每个标签设置一个主目录和一个子目录。
答案 1 :(得分:1)
嗯 - 当您知道batch_size
时,您可以从flow_from_directory
对象获取图片数量:
test_batches = ImageDataGenerator().flow_from_directory(.., batch_size=n)
number_of_examples = len(test_batches.filenames)
number_of_generator_calls = math.ceil(number_of_examples / (1.0 * n))
# 1.0 above is to skip integer division
test_labels = []
for i in range(0,int(number_of_generator_calls)):
test_labels.extend(np.array(test_batches[i][1]))
答案 2 :(得分:1)
您可以简单地从DirectoryIterator获取一个字典,其中包含标签和索引(采用一键编码)。然后,访问密钥将为您提供所有标签。
test_batches.class_indices.keys()
答案 3 :(得分:0)
如果只需要标签,则可以直接使用
test_batches.labels
但是有时候您需要该值,那么您可以这样做: validation_x = []
for i in range( test_batches.__len__() ):
validation_x.extend(
test_batches.__getitem__( i )[0]
)