除了解析文件名外,还获取 class Keras 的 ImageDataGenerator 图像信息

Get class info of Keras' ImageDataGenerator images besides parsing filename

我从验证目录(和测试目录)中的两个目录(两个 class 加载了 ImageGenerator 及其 flow_from_dirctory-function 的图像,名称为 "cats" 和 "dogs":

validation_generator = test_datagen.flow_from_directory(
        root_dir + '/validate',
        target_size=(img_x, img_y),
        batch_size=batch_size,
        color_mode='grayscale',
        class_mode='input',  # necessarry for autoencoder
        shuffle=False, # must be false otherwise filenames are wrong
        seed = seed)

在使用了一些 Keras 模型生成和拟合后,我想调试示例图像:我想从 validation_generator 和 运行 模型中获取图像。但是我必须知道图像首先位于哪个目录中,或者它被分配到 class。

为了绘图我使用:

import matplotlib.pyplot as plt
n = 7
x,y = validation_generator.next()
for i in range(0,n):
    image_x = x[i,:,:,0]
    #print(validation_generator.class_indices) # always shows the same
    print(validation_generator.filenames[i]) # only OK if shuffle=false
    plt.imshow(image_x)
    plt.show()

我只能找到解析 validation_generator.filenames[i] 并获取它的目录的可能性。还有其他更优雅的方法吗?

class_indices 属性是一个字典,其中包含从 class 名称到 class 索引的映射,因此对于生成器生成的每个数据示例来说,这确实是相同的。您可以按如下方式从 y 访问 image_x 的标签:

label_x = y[i]

自动编码器似乎没有优雅的方式,所以我 post 我的古怪方式:

import matplotlib.pyplot as plt
import os
n = 7
x,y = validation_generator.next()
for i in range(0,n):
    plt.figure(figsize=(2, 2))
    image_x = x[i,:,:,0]
    image_label = os.path.dirname(validation_generator.filenames[i]) # only OK if shuffle=false
    print(image_label)
    plt.imshow(image_x)
    plt.show()
validation_generator.class_indices  # ==> return: {'ants': 0, 'bees': 1}