Keras ImageDataGenerator()如何从数据中获取所有标签

时间:2018-01-22 01:45:27

标签: python keras

我在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)

如本主题的类似帖子中所建议,仅返回一个批次的标签而不是整个数据集。因此,我想知道是否有一种比我上面使用的方法更有效的方法。

4 个答案:

答案 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] 
        )