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

Aar*_*nDT 11 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]))
Run Code Online (Sandbox Code Playgroud)

但是,此代码仅有效,因为我知道我总共有 150 张图像,并且我的批量大小定义为 50。

此外使用:

imgs, labels = next(test_batches)
Run Code Online (Sandbox Code Playgroud)

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

p13*_*r0m 14

您可以简单地从 DirectoryIterator 获取一个字典,其中包含单热编码中的标签和索引。然后访问密钥将为您提供所有标签。

test_batches.class_indices.keys()
Run Code Online (Sandbox Code Playgroud)


小智 7

如果你只是想要标签,你可以直接使用

test_batches.labels
Run Code Online (Sandbox Code Playgroud)

但有时你想要这个值,那么你可以这样做:validation_x = []

for i in range( test_batches.__len__() ):
    validation_x.extend(
        test_batches.__getitem__( i )[0] 
        )
Run Code Online (Sandbox Code Playgroud)


Mar*_*jko 6

好吧 - 当你知道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]))
Run Code Online (Sandbox Code Playgroud)