【问题标题】:Data augmentation before splitting拆分前的数据增强
【发布时间】:2018-11-11 08:02:03
【问题描述】:

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

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

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

所以:

a) 您能否在使用 sklearn 的 TrainTestSplit 拆分数据之前对其进行扩充,而不会以错误的方式影响您的结果?

b) 如果我的方法错了,还有什么方法可以尝试?

提前致谢!

【问题讨论】:

  • 你可以只在训练集上尝试旋转(拆分数据后)并检查性能吗?
  • 我们在切换之前第一次这样做了。感觉就像我们的测试准确度与稳定的训练准确度相比跳跃了一大堆(测试在 2-3% 的范围内上下跳跃)。使用我们的模型,我们也得到了过度拟合,因为训练仍将上升到高水平,而测试将保持在 87 左右,并保持波动
  • 那么这应该被视为您真正的测试准确性。因为您将在考试中获得的测试数据不会被轮换。您可以尝试交叉验证和超参数调整来提高性能,但我建议不要接触最终预测以外的测试数据。
  • 抱歉,我并没有明确说明这个作业是考试。我们必须在教授面前捍卫我们的选择。感谢您的信息,我会相应地调整模型!

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


【解决方案1】:

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

如果在拆分数据集之前扩充数据,它可能会将训练数据集的微小变化注入到测试数据集中。因此,网络将高估其准确性(除其他问题外,它也可能过度拟合)。

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 2019-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-11
    相关资源
    最近更新 更多