Keras 图像的K-折叠交叉验证

Keras 图像的K-折叠交叉验证,keras,deep-learning,Keras,Deep Learning,假设我有一些图片分为3类(“猫”、“狗”、“鼠标”),我的DL网络是用keras编写的。 我使用的设计与此图片(1)中的相同: 我将数据分为三个不同的文件夹:培训、验证和测试。 根据图片,网络应该能够识别猫、狗或老鼠。我得到的准确率约为98% 它起作用了。 但出于某些原因,我需要改变这种设计。我想使用K-fold交叉验证过程,模式现在应该如(2)所示: 现在我的问题是,我不知道如何根据图2中的模式分割和分发原始数据 我只能想象两种不同的方式。让我们暂时忘记测试目录: 我创建了两个文件夹:“培

假设我有一些图片分为3类(“猫”、“狗”、“鼠标”),我的DL网络是用keras编写的。 我使用的设计与此图片(1)中的相同:

我将数据分为三个不同的文件夹:培训、验证和测试。 根据图片,网络应该能够识别猫、狗或老鼠。我得到的准确率约为98%

它起作用了。 但出于某些原因,我需要改变这种设计。我想使用K-fold交叉验证过程,模式现在应该如(2)所示:

现在我的问题是,我不知道如何根据图2中的模式分割和分发原始数据

我只能想象两种不同的方式。让我们暂时忘记测试目录:

  • 我创建了两个文件夹:“培训”和“验证”。两者的结构与图1相同:每个类别有三个子目录。现在的问题是:在从折叠1到折叠3的过程中,是否应该移动数据?或者我可以将图像分配到子目录中

  • 我创建了两个文件夹:“Training”和“Validation”,但我将所有图像混合在一起。没有子目录。在这种情况下,我的问题是,我失去了图片名称和宠物之间的联系。我怎样才能告诉Keras应该识别哪种动物

  • 就我个人而言,我会把所有的图像混合在一起,不管它们显示什么。但我会将内容的信息保存到一个文件中。在本例中,我将目录(验证或培训)和一个包含所有文件及其内容的文件传递给Keras


    你有什么建议?

    好的,我可以回答我自己的问题

    最简单的方法就是在python脚本中使用
    Kfold
    form
    sklearn

    from sklearn.model_selection import KFold
    
    在那之后,你需要对KFold进行估计

    kfold = KFold(n_splits = 4, shuffle = True)
    
    然后对拆分的数据集进行迭代,如下所示:

    datagen = ImageDataGenerator(rescale = 1. / 255.)
    
    
    for train, test in kfold.split(df_data):
        
        # df is the whole dataset (all together!)
        df_train = df.iloc[train, :]  # Look that train is coming from the for in .. loop
        df_test  = df.iloc[test, :]  # The same for test
    
        train_generator = datagen.flow_from_dataframe(dataframe = df_train,
                                                      directory = dataset_dir,
                                                      ... )
    
        test_generator = datagen.flow_from_dataframe(dataframe = df_test,
                                                     directory = dataset_dir,
                                                     ...)
    
    
        model = models.Sequential()
        .....
    
        model.compile(...)
        model.fit(...)
    
    就这样!数据集现在被分割成多个分区!!! 注意类ImageDataGenerator不在for循环中!!! 请注意,方法(model
    creation,compile()和fit()
    必须在for循环中


    上面的代码对我很有用。

    你能分享你的完整代码吗?