深度学习数据不均衡的处理方法

       在进行机器学习,深度学习任务时,经常会碰到数据不均衡的问题。如果数据严重失衡甚至会导致训练后的模型对任何样本对判别为训练数据中占比较多的一类。以下总结了再做图像任务时,处理数据不均衡问题常用的几种方法。下面分别从数据层面和优化算法层面考虑分别介绍。

一、数据层面

1、欠采样

      对不均衡数据中样本较多的一类进行采样,使其约等于样本量较少的一类。但是,由于图像任务模型一般参数众多,要求更多的训练数据量。欠采样为了保证数据均衡,舍弃了部分数据。一般来说,不采用这种方式。

2、过采样

对不均衡数据中样本减少的一类重复采样。常使用以下方法:

1)直接复制

相同的数据直接复制几份达到扩充数据的目的,但可能会导致过拟合,一般少用这种方式。

2)数据增强

数据增强一般有两种方式:静态数据增强和实时数据增强(动态数据增强)。静态数据增强就是对数据增强后直接加入训练集。实时数据增强是在训练过程中对每个batch的数据进行数据增强(数据随机性更大,更不易发生过拟合)。一般常使用实时数据增强的方式。在训练的过程中进行数据增强。

常使用以下三种变换进行数据增强:颜色变换、空间变换、噪声变换。

颜色变换:

  • 随机调整亮度
  • 对比度
  • 颜色
  • 饱和度

空间变换:

  • 水平翻转
  • 上下翻转
  • 转置
  • 小角度旋转
  • 仿射变换  

噪声变换:

  • Gaussion噪声
  • Poisson噪声
  • Mask噪声
  • 椒盐噪声
  • 彩虹噪声

虽然tensorflow和Keras对集成了一些数据增强的方法。但还是推荐一个好用的数据增强的python包imgaug。以上说的图像数据增强的方法包里均有而且调用方便。功能很强大。具体使用方法网上很多。

3、GAN对抗生成网络

可以使用对抗生成网络生成虚假数据。来扩充数据集。

二、算法层面

可以使用一些优化技巧让模型更加关注占比较少类的样本。从而使模型能专注学习此类的特征,而不是过多的关注样本数量较多的类别。例如使用focal loss。也有其他更多的解决类别不均衡的loss函数。

 

其他的方法后续继续补充。

 

 

你可能感兴趣的:(深度学习,数据增强,类别不均衡,深度学习,keras,deeplearning)