Python 我如何以简单的方式以Keras为单位分配等级权重?

Python 我如何以简单的方式以Keras为单位分配等级权重?,python,tensorflow,deep-learning,keras,Python,Tensorflow,Deep Learning,Keras,有谁能告诉我,当数据集不平衡时,在Keras中应用class_weight最简单的方法是什么 我的目标只有两门课 谢谢。您是在询问要应用的正确权重,还是在代码中如何应用?代码很简单: class_weights = {} for i in range(2): class_weights[i] = your_weight 然后在model.fit中传递参数class\u weight=class\u weights 使用的正确权重是某种逆频率;您还可以进行一些尝试和错误。

有谁能告诉我,当数据集不平衡时,在Keras中应用
class_weight
最简单的方法是什么

我的目标只有两门课


谢谢。

您是在询问要应用的正确权重,还是在代码中如何应用?代码很简单:

class_weights = {}
    for i in range(2):
        class_weights[i] = your_weight
然后在
model.fit
中传递参数
class\u weight=class\u weights


使用的正确权重是某种逆频率;您还可以进行一些尝试和错误。

函数的
class\u weight
参数是将类映射到权重值的字典

假设你有500个类0的样本和1500个类1的样本,比你在类_-weight={0:3,1:1}中输入的样本多。这使得0类的权重是1类的三倍

train\u generator.classes
为您的权重提供正确的类名

如果您想以编程方式计算此值,可以使用scikit learn

该函数查看标签的分布,并生成权重,以同等惩罚训练集中代表性不足或代表性过高的类

请参见此处的此有用线程:


这个线程也可能有帮助:

使用sklearn kit中的class_weight

我也用这种方法来处理不平衡数据

from sklearn.utils import class_weight
class_weight = class_weight.compute_class_weight('balanced'
                                               ,np.unique(Y_train)
                                               ,Y_train)
然后是model.fit

Classifier.fit(train_X,train_Y,batch_size = 100, epochs = 10
           ,validation_data= (test_X,test_Y),class_weight = class_weight )

1-使用标签及其相关权重定义字典

class_weight = {0: 0.1,
                1: 1.,
                2: 2.}
2-将字典作为参数输入:

model.fit(X_train, Y_train, batch_size = 100, epochs = 10, class_weight=class_weight)

类权重采用字典类型

from collections import Counter
itemCt = Counter(trainGen.classes)
maxCt = float(max(itemCt.values()))
cw = {clsID : maxCt/numImg for clsID, numImg in itemCt.items()}

谢谢,这就是我想要的最后一个明确的例子!其他任何地方似乎都没有说明权重是向上还是向下这应该是最重要的答案-它回答了问题的内容(关于Keras,而不是scikit learn),还提供了文档和解释。类的命名是从0还是1开始的?