【问题标题】:keras: issue using ImageDataGenerator and KFold for fit_generatorkeras:为 fit_generator 使用 ImageDataGenerator 和 KFold 的问题
【发布时间】:2017-06-07 04:57:32
【问题描述】:

flow_from_directory(directory):这会接收目录但不会分割训练图像。

sklearn.model_selection.KFold:提供图像的分割索引。这些可以在 fit() 中使用,但不能在 fit_generator() 中使用

如何将 KFold 与 ImageDataGenerator 一起使用?有吗?

【问题讨论】:

    标签: python machine-learning scikit-learn neural-network keras


    【解决方案1】:

    目前无法使用flow_from_directory 生成器拆分文件夹中保存的数据集。这个选项根本没有实现。要获得 test / train 拆分,需要使用例如将主目录拆分为一组 train / test /val 目录。 os Python 中的库。

    【讨论】:

      【解决方案2】:

      假设您有 2 个类别的分类问题,我会这样做:

      from keras.utils import to_categorical  
      
      train_y = to_categorical(train_y, num_classes=2)
      test_y = to_categorical(test_y, num_classes=2)
      
      aug = ImageDataGenerator(...) #your ImageDataGenerator
      
      Model = model.fit_generator(aug.flow(train_x,tain_y, batch_size=32), 
                  validation_data=(test_x,test_y))
      

      【讨论】:

        【解决方案3】:

        致遇到此问题的任何人:截至发布此答案的日期 - 我认为没有(至少相对)简单的开箱即用解决方案,并由我的结果决定自己的搜索。

        我想出的解决项目中类似问题的唯一解决方案是在我的数据集中创建分区,分区数等于折叠数,并将它们保存为字典,分区数作为键和文件路径列表作为分区的值。之后,您仍然需要将文件分别分类到训练和验证子集的类文件夹中。

        例如:设 K=10。算法可以这样描述:

        • 将您的数据集分成 10 个大小相同的分区。
        • 将一个分区作为验证子集。按类别将其排序到所需的文件夹中。
        • 应将其余分区视为训练子集并分类到所需的文件夹中。
        • 为 val 和训练子集创建 data_generators。
        • 使用您的架构训练您的模型并保存它
        • 对每个其他分区重复上述步骤(将一个分区作为 val,在其他分区上训练),但现在您必须从保存文件中加载模型

        我担心这个解决方案的代码 sn-p(包括排序脚本和分区字典形成脚本)太大而无法提供,但如果有必要我很乐意分享。

        【讨论】:

          猜你喜欢
          • 2018-06-03
          • 2019-04-25
          • 2017-11-17
          • 2020-08-01
          • 2019-05-29
          • 1970-01-01
          • 1970-01-01
          • 2019-10-26
          • 2023-03-30
          相关资源
          最近更新 更多