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)
或者,您可以简单地执行以下操作:
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) You can then set (as per comment above):
model.fit_generator(..., class_weight=class_weights)
from sklearn.utils.class_weight import compute_class_weight
unique_classes = np.unique(ds_train.classes)
# "If ‘balanced’, class weights will be given by n_samples / (n_classes * np.bincount(y))."
class_weights = compute_class_weight("balanced", classes=unique_classes, y=ds_train.classes)
class_weight = {class_id: weight for class_id, weight in zip(unique_classes, class_weights)}
model.fit(..., class_weight=class_weight)
7条答案
按热度按时间68bkxrlz1#
我刚刚想到了一个实现这个的方法。
train_generator.classes
是每个图像的类别列表。Counter(train_generator.classes)
创建每个类别中图像数量的计数器。请注意,这些权重可能不利于收敛,但您可以将其用作基于出现次数的其他类型权重的基础。
kadbb4592#
或者,您可以简单地执行以下操作:
然后,您可以设置(按照上面的注解):
vyswwuz23#
我尝试了这两种解决方案,
sklearn.utils.class_weight
的准确性更好,虽然我不知道为什么,但它们并不都产生相同的类权重。kqqjbcuj4#
正如文章here中所建议的,分配类权重的一个好方法是用途:
因此,稍微修改Fábio Perez上面建议的方法:
4bbkushb5#
Pasha Dembo建议的代码运行得很好。但是,在插入model_fit生成器之前,您应该在字典中对其进行转换:
或者,您可以简单地执行以下操作:
qgzx9mmu6#
643ylb087#
April 2023 version.结束使用此: