【问题标题】:ImageDataGenerator flow_from_directory with grandchild folderImageDataGenerator flow_from_directory 与孙文件夹
【发布时间】:2021-07-01 02:59:48
【问题描述】:

我有一个 k-fold 训练数据集,但它的结构有一个孙文件夹,例如:

/monkey
     / howler monkey
         - img1
         - img2
     / japanese macaque
         - img1
         - img2
/dog
     / bulldog
         - img1
         - img2
     / Rottweiler
         - img1
         - img2

在这种情况下,当我使用ImageDataGenerator flow_from_directory 时。准确找到 8 个 img,但班级有 2 个,而不是 4 个。我怎样才能获得 4 个班级?

【问题讨论】:

    标签: python tensorflow machine-learning keras dataset


    【解决方案1】:

    我有这个问题很长时间了,我无法使用.flow_from_directory 找到直接答案。而我所做的是使用.flow_from_dataframe。首先,我刚刚创建了一个带有图像路径及其相应标签的数据框(在您的情况下是吼猴、日本猕猴等)。制作此数据框时,您不会在任何时候实际加载图像。

    它会是这样的:

    images_paths_label = []
    for root_class in os.listdir(root_folder):
       temp_class = os.path.join(root_folder, root_class)
       for class in os.listdir(temp_class):
           temp_subclass = os.path.join(temp_class, class)
           for image in os.listdir(temp_subclass):
               temp_img_path = os.path.join(temp_subclass, image)
               images_paths_label.append([temp_img_path, class])
    
    df = pd.DataFrame(images_paths_label, columns = ['image_path', 'label'])
    
    # Now the flow_from_dataframe part
    generator = ImageDataGenerator(validation_split = 0.2)
    train_generator = generator.flow_from_directory(df, directory = None, x_col = 'image_path', y_col = 'label', seed = 14,...)
    
    • 在使用前检查代码 sn-p 的缩进。我只是在 stackoverflow 中输入它。

    您提供directory = None,因为您将绝对路径放在数据框的image_path 列中。并且指定了一个种子,因为shuffle= True 默认情况下它应该是正确的,因为您的数据帧样本是按类排序的。并在此处设置种子,可以确保验证数据保持不变。

    这应该让您总体了解如何在仍然使用生成器的同时克服这个问题。如果您发现任何问题,请告诉我。

    【讨论】:

      猜你喜欢
      • 2017-09-05
      • 2018-03-05
      • 2020-03-11
      • 2019-11-20
      • 1970-01-01
      • 1970-01-01
      • 2018-11-02
      • 1970-01-01
      • 2021-09-30
      相关资源
      最近更新 更多