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

3ks5zfa0  于 2023-11-19  发布在  其他
关注(0)|答案(5)|浏览(117)

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


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

jjjwad0x

jjjwad0x1#

你可以简单地从DirectoryIterator中获取一个字典,其中包含了标签和索引的独热编码。然后删除键将给予所有的标签。

test_batches.class_indices.keys()

字符串

14ifxucb

14ifxucb2#

好吧-当你知道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]))

字符串

mctunoxg

mctunoxg3#

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

test_batches.labels

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

for i in range( test_batches.__len__() ):
    validation_x.extend(
        test_batches.__getitem__( i )[0] 
        )

kgsdhlau

kgsdhlau4#

我知道flow方法允许传递图像和标签,但是你需要在内存中已经加载了图像。
我从来没有在flow_from_directory上试过,但是如果你看看documentation,他们似乎要求你有一个主目录和一个标签。

j1dl9f46

j1dl9f465#

从ImageDataGenerator()获取独热编码标签的一种更简单的方法

test_labels = keras.utils.to_categorical(test_batches.labels, num_classes=CLASS_SIZE)

字符串

相关问题