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