克拉斯
ImageDataGenerator
可以用来"Generate batches of tensor image data with real-time data augmentation“
教程here演示了如何使用ImageDataGenerator扩充小型但平衡的数据集。有没有一种简单的方法可以使用这个生成器来增加一个严重不平衡的数据集,以便产生的生成的数据集是平衡的?
发布于 2017-01-14 08:47:57
这不是处理不平衡数据的标准方法。我也不认为这是真正合理的-你会显着改变你的类的分布,其中较小的类现在的可变性要小得多。较大的类将具有丰富的变化,较小的将是许多具有小仿射变换的相似图像。他们将生活在图像空间中比大多数类别小得多的区域上。
更标准的方法是:
前两种选择实际上是一种黑客行为,这可能会损害您处理现实世界(不平衡)数据的能力。两者都没有真正解决可变性低的问题,这是由于数据太少所固有的。如果在模型训练之后应用到真实世界的数据集不是问题,并且您只想在您拥有的数据上获得良好的结果,那么这些选项是可以接受的(并且比为单个类生成生成器要容易得多)。
如果你有足够的数据,第三种选择是正确的(例如,recent paper from Google about detecting diabetic retinopathy在阳性病例在10%到30%之间的数据集中达到了很高的准确率)。
如果你真的想为一个类在另一个类上生成各种增强的图像,那么在预处理中可能是最容易的。获取少数类的图像并生成一些增强版本,然后将其称为数据的一部分。就像我说的,这一切都很老套。
发布于 2021-05-24 20:22:24
您可以使用此策略根据不平衡计算权重:
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?启发的
https://stackoverflow.com/questions/41648129
复制相似问题