我有一个具有以下分布的图像数据集:
我认为我需要添加“类权重”来弥补第1、2、3和4类中的少量图像。
我试图通过将0类除以1类,将0类除以2类等等来计算类权重。
我假设类0对应于1,因为它不需要缩放?不确定是否正确。
class_weights = np.array([1, 10.5, 4.9, 29.4, 36.75])
并将它们添加到我的健身功能中
model.fit(x_train, y_train, batch_size=batch_size, class_weight=class_weights, epochs=epochs, validation_data=(x_test, y_test))
我不确定我是否正确地计算了权重,甚至不确定应该怎么做?
希望任何人都可以帮助澄清它。
答案 0 :(得分:1)
请访问此答案以寻求适当的解决方法https://datascience.stackexchange.com/a/18722
我了解到您正在尝试设置班级权重,但也考虑通过图像增强为代表性不足的班级生成更多图像。
答案 1 :(得分:0)
首先要确保通过字典,因为class_weights
参数需要字典。
第二,对类进行加权的要点如下。假设您有一个二进制分类问题,其中class_1
有1000个实例,class_2
有100个实例。由于您要补偿不平衡的数据,因此可以将权重设置为:
class_weights={"class_1": 1, "class_2": 10}
换句话说,这意味着如果模型在真实标签为class_2
的地方犯了错误,那么与在真实类别为的样本中犯错的情况相比,将被罚款10倍以上。 class_1
。您想要这样的事情是因为给定数据中的类分布,由于默认情况下该模型人口过多,因此该模型将固有地过拟合class_1
。通过设置类权重,您将对模型施加隐式约束,即对class_1
的10个实例进行错误的预测和对class_2
的实例进行1个错误的预测同样不好。 / p>
话虽如此,您可以随时设置class_weights
,这意味着没有正确或错误的方法。您设定权重的方式对我来说似乎很合理。
答案 2 :(得分:0)
我解决了这个问题,非常感谢gorjan。
class_weight = {0: 1.0,
1: 10.5,
2: 4.8,
3: 29.5,
4: 36.4}
不是在类名周围输入例如“ 0”或“ 1”,而是通过“:”而不是:“)并按照您的建议使用dict而不是np数组。