Fáb*_*rez 10 deep-learning keras
我有一个不平衡的多类数据集,我想使用class_weight参数from fit_generator根据每个类的图像数量给类加权.我正在使用ImageDataGenerator.flow_from_directory从目录加载数据集.
是否可以直接class_weight从ImageDataGenerator对象推断出参数?
Fáb*_*rez 23
刚刚找到了实现这一目标的方法.
from collections import Counter
train_datagen = ImageDataGenerator()
train_generator = train_datagen.flow_from_directory(...)
counter = Counter(train_generator.classes)
max_val = float(max(counter.values()))
class_weights = {class_id : max_val/num_images for class_id, num_images in counter.items()}
model.fit_generator(...,
class_weight=class_weights)
Run Code Online (Sandbox Code Playgroud)
train_generator.classes是每个图像的类列表.
Counter(train_generator.classes)创建每个类中图像数量的计数器.
请注意,这些权重可能不适合收敛,但您可以将其用作基于事件的其他类型加权的基础.
这个答案的灵感来自:https://github.com/fchollet/keras/issues/1875#issuecomment-273752868
小智 9
或者,您可以简单地执行以下操作:
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)
Run Code Online (Sandbox Code Playgroud)
然后,您可以进行设置(根据上面的评论):
model.fit_generator(..., class_weight=class_weights)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4412 次 |
| 最近记录: |