python - 拆分前的数据扩充

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

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

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

自从我进行了此更改后,我的当前模型在 50 个时期后获得了大约 95% 的训练和测试准确率。由于这超出了我的预期,我开始质疑是否主要接受增强测试数据而最终没有出现有偏见或错误的结果。

所以:

a) 在使用 sklearn 的 TrainTestSplit 拆分数据之前,您能否在不以错误方式影响结果的情况下扩充数据?

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

提前致谢!

最佳答案

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

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

避免此陷阱的一个好方法是在拆分原始数据集后扩充数据。

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

  • 图片旋转
  • 图像剪切
  • 图像缩放(裁剪和重新缩放)
  • 添加噪音
  • 色调略有变化
  • 图像移动
  • 图像填充
  • 图像模糊
  • 图像浮雕

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

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

关于python - 拆分前的数据扩充,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50639003/

相关文章:

python - 素因子分解不适用于具有重复因子的数字

python - GridSearchCV 的并行错误,适用于其他方法

deep-learning - Keras LSTM 输入 - 预测抛物线轨迹

python - 如何根据特定类名加载CIFAR-10数据集?

python - Pandas groupby 聚合截断最早日期而不是最旧日期

python - 引用字符串解析器

optimization - 专门针对误报的二元分类目标

python - 使用新数据更新 SVM 分类器

machine-learning - Pytorch 模型不学习恒等函数?

python - python中多个函数的有序reduce