我正在处理multi-label
的{{1}}图像分类问题,因此我使用函数Keras
和flow_from_dataframe()
。
我大约有fit_generator()
个类,并且您可以猜测它们高度偏斜/不平衡。经过一番搜索之后,我遇到了参数2000
和class_weight
,我决定尝试一下。我的问题是,我不确定是否正确使用它们。这是一个示例:
让我们假设我已经平整了所有类的出现,以便获得以下(重复的)标签列表:
classes
这是计算labels = ['classD', 'classA', 'classA', 'classC', 'classD', 'classD']
和classes
的函数:
class_weight
我们还假设我只考虑排名前2位的班级:
from collections import Counter
def get_classes_weights(l, n):
counter = Counter(l).most_common(n)
classes = [cls for cls, ocu in counter]
majority = max([ocu for cls, ocu in counter])
weights = {idx: float(majority/ocu) for idx, (cls, ocu) in enumerate(counter)}
return classes, weights
这给出了:
classes, class_weight = get_classes_weights(labels, 2)
和:
classes: ['classD', 'classA']
最后,这就是我在函数中使用它们的方式:
class_weight: {0: 1.0, 1: 1.5}
generator_train.flow_from_dataframe(
classes=classes,
)
所以我的问题是:
model.fit_generator(
class_weight=class_weight
)
图像分类问题,上述方法是正确的加权方法吗?