首页 文章

keras图像预处理不 balancer 数据

提问于
浏览
8

所有,

我正在尝试使用Keras对两个类进行图像分类 . 对于一个 class ,我的图像数量非常有限,比如500.对于另一个 class ,我的图像数量几乎无穷无尽 . 所以,如果我想使用keras图像预处理,该怎么做?理想情况下,我需要这样的东西 . 对于第一类,我提供500个图像并使用ImageDataGenerator来获取更多图像 . 对于第二类,每次我从1000000图像数据集中依次提取500个图像,并且可能不需要数据增加 . 在这里查看the example以及Keras documentation时,我发现训练文件夹默认包含每个类的相同数量的图像 . 所以我的问题是,是否存在用于执行此操作的现有API?如果是这样,请向我指出 . 如果没有,是否有针对此需求的解决方法?

1 回答

  • 6

    你有一些选择 .

    Option 1

    使用fit()函数的 class_weight 参数,该函数是将类映射到权重值的字典 . 假设您有500个0级样本和1500个1级样本,而不是 class_weight = {0:3 , 1:1} . 这使得0级成为第1级重量的三倍 .

    train_generator.classes 为您的加权提供正确的类名 .

    如果你想以编程方式计算这个,你可以使用scikit-learn的 sklearn.utils.compute_class_weight()https://github.com/scikit-learn/scikit-learn/blob/master/sklearn/utils/class_weight.py

    该函数查看标签的分布并生成权重,以同等地惩罚训练集中的不足或过度表示的类 .

    另见这个有用的线程:https://github.com/fchollet/keras/issues/1875

    这个主题可能也有帮助:Is it possible to automatically infer the class_weight from flow_from_directory in Keras?

    Option 2

    您可以使用带有生成器的虚拟训练运行,您可以应用旋转,缩放,裁剪,翻转等图像增强,并在以后保存增强图像以进行实际训练 . 通过这种方式,您可以为代表性不足的类创建更大或更 balancer 的数据集 .

    在这个虚拟运行中,您将 flow_from_directory 函数中的 save_to_dir 设置为您选择的文件夹,稍后仅从您需要更多样本的类中获取图像 . 您显然会丢弃任何训练结果,因为您只使用此运行来获取更多数据 .

相关问题