Python 分类任务,当测试集分布不同时,结果不同

Python 分类任务,当测试集分布不同时,结果不同,python,machine-learning,keras,conv-neural-network,Python,Machine Learning,Keras,Conv Neural Network,我正在使用conv网络对图像进行分类。多类问题得到12级 我的训练集是3500图像,等级不平衡,例如等级A=1200图像,等级B=50图像。我使用类权重来对抗不平衡和数据扩充 编辑数据扩充使用keras功能,只进行旋转和翻转。我只增加训练集 因为我班上的一些人有非常小的数据,我做了一个60%的培训/20%的验证/20%的测试集,也就是说,对于B班,我得到了30个培训数据/10个验证数据/10个测试数据 然后我进行了不同的划分,每次都有不同的培训/验证和测试数据 结果是稳定的=>我的指标微观F1分

我正在使用conv网络对图像进行分类。多类问题得到12级

我的训练集是3500图像,等级不平衡,例如等级A=1200图像,等级B=50图像。我使用类权重来对抗不平衡和数据扩充

编辑数据扩充使用keras功能,只进行旋转和翻转。我只增加训练集

因为我班上的一些人有非常小的数据,我做了一个60%的培训/20%的验证/20%的测试集,也就是说,对于B班,我得到了30个培训数据/10个验证数据/10个测试数据

然后我进行了不同的划分,每次都有不同的培训/验证和测试数据 结果是稳定的=>我的指标微观F1分数在不同的分类中没有太大变化,混淆矩阵显示没有阶级效应:不同的分类并不意味着给定的阶级有不同的结果

现在,我将我的模型应用到一个没有标签的集合上。大约10000张图片。 结果非常糟糕:当我在测试集上获得B类60%的精度分数时,对于没有标签的测试集,我的精度在5%左右

我的问题:

可能是装修过度吗?当我停止训练模型时,训练损失=0.3/训练F1=95%。验证损失=0.7/验证F1=80% 我不这么认为,因为验证损失并没有增加,所以我在模型增加之前就停止了它


为了理解为什么我的结果在新的10000个数据集上如此糟糕,我可以调查什么呢?当我说我的结果时,我说的是精度,因为这是我可以为某些类轻松计算的唯一一个指标。可能你拟合过度了,因为你的模型是在一组小的B类图像上学习的,这些图像是经过增强的。增强会产生更多的数据,但图像的内容本质上保持不变。如果新的未标记B类图像与训练图像相似,则不应出现此问题,但如果它们不同,则会出现此问题。在增强图像上也训练您的模型,但仅在原始图像上验证,以防止过度拟合,并帮助模型更好地概括。看看这个

您可以尝试的另一件事是从其他类中获取一个小样本,在不进行扩充的情况下训练一个新模型,然后测试图像。这将为您提供一些说明,说明模型是否过度拟合了增强数据


如果您只在Keras中进行基本的增强,您还可以尝试像GAN这样的高级增强技术。如果可能,请使用补充步骤更新您的问题。

谢谢!我已经编辑了这个问题。当我在测试集上不使用数据扩充时,我会损失大约5%的性能。那么验证呢。数据扩充应该只用于训练数据,而不用于验证和测试。我的错。我的意思是:我只增加训练集。在没有增加的情况下,我会在测试集上损失5%。只在相等集上的两个类上训练你的模型,并测试预测。在我们开始解决问题之前,我们需要解决这个问题。谢谢!我找到了错误的来源。我正在降低这两组图像的分辨率,但这会导致10000个未标记数据的图像出现错误。