我想使用类权重来训练具有不平衡数据集的 CNN。如果所有示例的权重总和必须保持不变,就会出现问题?
我之前的计划是使用 scikit-learn 中的 function compute_class_weight('balanced
, np.unique(y_train),y_train)
function 。
但我完全不确定这是否适合 CNN 的类权重?
预先感谢您的每个提示
我想使用类权重来训练具有不平衡数据集的 CNN。如果所有示例的权重总和必须保持不变,就会出现问题?
我之前的计划是使用 scikit-learn 中的 function compute_class_weight('balanced
, np.unique(y_train),y_train)
function 。
但我完全不确定这是否适合 CNN 的类权重?
预先感谢您的每个提示
如果实验的“成本”不是那么大,我建议你花时间去实验,把它当作一个学习机会,如果它真的能奏效就试试。
解决类不平衡的方法有很多,设置类权重是其中之一,也是最容易实现的。
特别针对您的情况,我可以根据我的经验告诉您它可能会失败的具体情况。所以基本上,当你有极端的阶级不平衡比如 1% 正面和 99% 负面时,这很可能会失败。这可能会失败的原因仅仅是因为在这种情况下使用类权重会对正样本赋予非常高的价值,如果您的模型未能检测到这一点,则惩罚非常高,因此会导致训练不稳定。最重要的是,考虑一个假设情况,您的模型在第 10 轮正确预测正类,然后在第 11 轮失败。对于这种情况,您可能会在第 10 轮损失例如 1.3,但在第 11 轮,您的损失可能会达到说像 37.7 只是因为它无法检测到所述样本。这也可能影响利用此损失的任何回调。
总而言之,如果情况可能像我描述的那样,那么不要使用它,否则只是玩弄一下,找出最适合你的东西。