Python 分裂前的数据扩充

Python 分裂前的数据扩充,python,scikit-learn,deep-learning,conv-neural-network,Python,Scikit Learn,Deep Learning,Conv Neural Network,在我的基于数据处理的考试中,我们收到了一个由4个字符组成的小辛普森数据集(巴特、荷马、丽莎、玛吉),用于构建一个围绕数据处理的卷积神经网络。然而,数据集只包含相当少量的图像:大约2200个图像被分为测试和训练 由于我对神经网络和深度学习非常陌生,因此可以增加我的数据(我将图像旋转9次)并在之后使用sklearn的testtrainsplit函数分割数据 因为我做了这个改变,我现在的模型经过50个时代后,训练和测试的准确率达到了95%左右。由于这超出了我的预期,我开始质疑是否主要是接受了增加测试数

在我的基于数据处理的考试中,我们收到了一个由4个字符组成的小辛普森数据集(巴特、荷马、丽莎、玛吉),用于构建一个围绕数据处理的卷积神经网络。然而,数据集只包含相当少量的图像:大约2200个图像被分为测试和训练

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

因为我做了这个改变,我现在的模型经过50个时代后,训练和测试的准确率达到了95%左右。由于这超出了我的预期,我开始质疑是否主要是接受了增加测试数据,而最终没有产生偏见或错误的结果

因此:

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

b) 如果我的方法是错误的,我还可以尝试什么方法


提前谢谢

列车和试验分离后,应增加数据。要正确工作,需要确保仅从列车拆分中增加数据

如果在分割数据集之前增加数据,则可能会将列车数据集的微小变化注入测试数据集中。因此,网络将高估其准确性(除其他问题外,还可能过度拟合)

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

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

  • 图像旋转
  • 图像剪切
  • 图像缩放(裁剪和重新缩放)
  • 增加噪音
  • 色调的微小变化
  • 像移
  • 图像填充
  • 图像模糊
  • 图像压印
这个github库对经典图像增强技术有很好的概述:(我没有使用过这个库。因此不能认可它的速度或实现质量,但它们在
README.md
中的概述似乎相当全面。)


一些神经网络库已经有了一些实用程序来实现这一点。例如:Keras有图像预处理的方法

您能否仅在列车组上尝试旋转(在分割数据后)并检查性能?在切换之前,我们已经第一次这样做了。与稳定的列车精度相比,我们的测试精度跳了很多次(测试在2-3%的幅度内跳上跳下)。在我们的模型中,我们也得到了一个过度拟合,因为训练仍然会上升到较高水平,而测试将保持在87左右,所有的波动,那么这应该被视为您真正的测试精度。因为你将在考试中获得的测试数据不会被旋转。您可以尝试交叉验证和超参数调整来提高性能,但我建议不要接触最终预测以外的测试数据。对不起,我没有真正澄清此作业是考试。我们必须在教授面前捍卫我们的选择。谢谢你提供的信息,我将相应地调整模型!