首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用keras图像生成器平衡不平衡的数据集

使用keras图像生成器平衡不平衡的数据集
EN

Stack Overflow用户
提问于 2017-01-14 08:29:03
回答 2查看 16.8K关注 0票数 35

克拉斯

代码语言:javascript
运行
AI代码解释
复制
ImageDataGenerator

可以用来"Generate batches of tensor image data with real-time data augmentation

教程here演示了如何使用ImageDataGenerator扩充小型但平衡的数据集。有没有一种简单的方法可以使用这个生成器来增加一个严重不平衡的数据集,以便产生的生成的数据集是平衡的?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-01-14 08:47:57

这不是处理不平衡数据的标准方法。我也不认为这是真正合理的-你会显着改变你的类的分布,其中较小的类现在的可变性要小得多。较大的类将具有丰富的变化,较小的将是许多具有小仿射变换的相似图像。他们将生活在图像空间中比大多数类别小得多的区域上。

更标准的方法是:

  • model.fit中的class_weights参数,您可以使用该参数使模型从少数类中学习更多。在不平衡的情况下,
  • 减少了大部分的大小。深度学习可以解决这个问题,它只是需要更多的数据(真的,这是解决所有问题的方法)。

前两种选择实际上是一种黑客行为,这可能会损害您处理现实世界(不平衡)数据的能力。两者都没有真正解决可变性低的问题,这是由于数据太少所固有的。如果在模型训练之后应用到真实世界的数据集不是问题,并且您只想在您拥有的数据上获得良好的结果,那么这些选项是可以接受的(并且比为单个类生成生成器要容易得多)。

如果你有足够的数据,第三种选择是正确的(例如,recent paper from Google about detecting diabetic retinopathy在阳性病例在10%到30%之间的数据集中达到了很高的准确率)。

如果你真的想为一个类在另一个类上生成各种增强的图像,那么在预处理中可能是最容易的。获取少数类的图像并生成一些增强版本,然后将其称为数据的一部分。就像我说的,这一切都很老套。

票数 49
EN

Stack Overflow用户

发布于 2021-05-24 20:22:24

您可以使用此策略根据不平衡计算权重:

代码语言:javascript
运行
AI代码解释
复制
from sklearn.utils import class_weight 
import numpy as np

class_weights = class_weight.compute_class_weight(
           'balanced',
            np.unique(train_generator.classes), 
            train_generator.classes)

train_class_weights = dict(enumerate(class_weights))
model.fit_generator(..., class_weight=train_class_weights)

这个答案是由Is it possible to automatically infer the class_weight from flow_from_directory in Keras?启发的

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41648129

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档