拆分前的数据增强

Bra*_*ram 3 python scikit-learn deep-learning conv-neural-network

在我基于数据处理的考试中,我们收到了一个包含 4 个字符(Bart、Homer、Lisa、Marge)的小型 simpsons 数据集来构建卷积神经网络。然而,该数据集只包含相当少量的图像:大约 2200 幅图像可拆分为测试和训练。

由于我对神经网络和深度学习非常陌生,因此可以增加我的数据(我将图像旋转 X 度 9 次)然后使用 sklearn 的 testtrainsplit 函数拆分我的数据。

自从我做了这个改变后,我的当前模型在 50 个 epoch 后获得了大约 95% 的训练和测试准确率。由于这超出了我的预期,我开始质疑是否主要接受增加测试数据而最终不会产生有偏见或错误的结果。

所以:

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

b) 如果我的方法是错误的,我可以尝试的另一种方法是什么?

提前致谢!

Odd*_*org 6

应该在训练和测试拆分后增加数据。为了正常工作,需要确保仅从 train split 中增加数据

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

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

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

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

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

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