拆分前的数据扩充

时间:2018-06-01 08:17:41

标签: python scikit-learn deep-learning conv-neural-network

对于基于数据处理的我的考试,我们收到了一个4个字符的小辛普森数据集(Bart,Homer,Lisa,Marge)来构建一个卷积神经网络。然而,该数据集仅包含相当少量的图像:大约2200分割成测试&列车。

由于我对神经网络和深度学习都很陌生,因此可以增加我的数据(我将图像转换为X度9次),然后使用sklearn来分割我的数据。 testtrainsplit功能。

由于我已经做出了这一改变,因此在我使用现有型号的50个时代之后,我的训练和测试准确率达到了95%左右。由于这比我预期的要多,我开始质疑是否主要接受扩充测试数据而不会产生偏见或错误的结果。

这样:

a)您是否可以在使用sklearn的TrainTestSplit进行分割之前增加数据,而不会以错误的方式影响您的结果?

b)如果我的方法错了,我可以尝试另一种方法吗?

提前致谢!

1 个答案:

答案 0 :(得分:1)

人们应该在训练和测试分裂后增加数据。要正常工作,需要确保仅从火车拆分中增加数据

如果增加数据并在拆分数据集之前,它可能会将训练数据集的小变量注入测试数据集。因此,网络将高估其准确性(并且可能过度拟合,以及其他问题)。

避免这种陷阱的一个好方法是在原始数据集被拆分后增加数据。

许多库实现python生成器,这些生成器随机应用一个或多个图像修改组合来扩充数据。这些可能包括

  • 图像旋转
  • 图像剪切
  • 图像缩放(裁剪和重新缩放)
  • 添加噪音
  • 色调的小变化
  • 图片转换
  • 图片填充
  • 图像模糊
  • 图像压花

这个github库对经典图像增强技术有很好的概述:https://github.com/aleju/imgaug(我没有使用过这个库。因此不能认可它的速度或实现质量,但它们在README.md中的概述似乎是相当全面。)

一些神经网络库已经有了一些实用程序来做到这一点。例如:Keras有图像预处理方法https://keras.io/preprocessing/image/