gpt4 book ai didi

python - 神经网络将所有内容分类为一类,在不平衡数据集上召回率=1

转载 作者:行者123 更新时间:2023-11-30 08:48:38 26 4
gpt4 key购买 nike

我正在尝试使用 Keras 中的深度神经网络(尤其是 VGG16)进行二元分类。不幸的是,我有一个非常不平衡的数据集(15.000/1.800 张图像),但就是找不到一种方法来规避它..

我看到的结果(关于训练和验证数据)

  • 记忆 = 1
  • 精度 = 0.1208(这正是 0 类和 1 类样本之间的比率)
  • AUC = 0.88(使用 SGD 约 30 个周期后,似乎是 1 - 精度)

我做了什么

  • 使用 this 从损失/准确率指标切换到 AUC小 helper
  • 按照描述使用 class_weight here这似乎没有帮助
  • 尝试不同的优化器(SGD、Adam、RMSProp)
  • BatchNormalization 层添加到我的(未经训练的)VGG16 中,并将卷积层上的 use_bias 设置为 False将我的整个网络视为 gist here .
  • 使用 Keras 内置的 ImageDataGenerator 进行增强以扩大数据集。

我认为可以进一步提供帮助(但尚未尝试)

  1. 为一个类进行比另一类更多的数据增强。不幸的是,我使用一个 ImageDataGenerator 来处理我的整个训练数据,并且我不知道如何比另一个类更多地增强一个类。
  2. 也许自定义损失函数可以对错误决策进行更多惩罚?我将如何实现?目前我只使用 binary_crossentropy
  3. 理论上,我可以调整预测的类别成员阈值,但这对训练没有帮助,也不会改善结果,对吧?
  4. 也许按照建议减少批量大小 here 。但我真的不明白为什么这会有帮助。目前,我正在以编程方式确定批量大小,以在一个时期内向网络显示所有训练和验证数据:
    steps_per_epoch = int(len(train_gen.filenames)/args.batch_size)
    validation_steps = int(len(val_gen.filenames)/args.batch_size)

您认为我应该首先解决什么问题,或者您有更好的主意吗?我也很高兴获得有关实现细节的每一个帮助。

提前非常感谢您!

最佳答案

也许尝试准备类平衡批处理(包括类 1 的加倍),如 https://community.rstudio.com/t/ensure-balanced-mini-batches-while-training/7505 中所述。 (R工作室)。另请阅读Neural Network - Working with a imbalanced datasetbalancing an imbalanced dataset with keras image generator

另一种可能性是在预处理中执行特征提取,即在图像上运行图像处理算法以突出显示特征

关于python - 神经网络将所有内容分类为一类,在不平衡数据集上召回率=1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52109738/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com