keras:为 fit_generator 使用 ImageDataGenerator 和 KFold 的问题

Posted

技术标签:

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

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

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

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

【问题讨论】:

【参考方案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(包括排序脚本和分区字典形成脚本)太大而无法提供,但如果有必要我很乐意分享。

【讨论】:

以上是关于keras:为 fit_generator 使用 ImageDataGenerator 和 KFold 的问题的主要内容,如果未能解决你的问题,请参考以下文章

Keras 用于二元分类预测的 fit_generator() 总是 50%

Keras:网络不使用 fit_generator() 进行训练

keras 入门整理 如何shuffle,如何使用fit_generator

使用 keras.utils.Sequence 和 keras.model.fit_generator 时出现 KeyError。

keras中fit_generator()的优势

使用 Keras 和 fit_generator 的 TensorBoard 分布和直方图