当测试和训练数据集来自不同来源时,为啥测试准确性保持不变并且不会增加二进制分类

Posted

技术标签:

【中文标题】当测试和训练数据集来自不同来源时,为啥测试准确性保持不变并且不会增加二进制分类【英文标题】:Why test accuracy remains constant and do not increase in binary classification when test and train dataset are from different source当测试和训练数据集来自不同来源时,为什么测试准确性保持不变并且不会增加二进制分类 【发布时间】:2017-06-14 20:57:20 【问题描述】:

我有来自两个不同来源的 train 数据集和 test 数据集。我的意思是它们来自两个不同的实验,但它们的结果都是相同的生物图像。我想使用 deep CNN 进行二进制分类,并且在测试准确度和训练准确度方面有以下结果。蓝线显示训练精度,红线显示近 250 个 epoch 后的测试精度。为什么测试精度几乎是恒定的而不是提高?是不是因为 TestTrain 数据集来自不同的分布?

编辑: 在我添加了 dropout 层、正则化项和均值减法之后,我仍然得到以下奇怪的结果,这表明模型从一开始就过度拟合!

【问题讨论】:

【参考方案1】:

可能有两个原因。首先,您过度拟合训练数据。这可以通过使用验证分数作为测试数据的比较指标来验证。如果是这样,您可以使用标准技术来对抗过度拟合,例如权重衰减和辍学。

第二个是你的数据太不一样了,不能像这样学习。这更难解决。您应该首先查看两个图像的价值分布。它们都归一化了吗? Matplotlib 自动为绘制的图像进行标准化。如果这仍然不起作用,您可能需要研究增强以使您的训练数据更类似于测试数据。在这里我不能告诉你使用什么,没有看到训练集和测试集。

编辑:

对于标准化,测试集和训练集应该具有相似的值分布。如果您进行数据集标准化,您将计算训练集的均值和标准差。但是您还需要在测试集上使用这些计算值,而不是从测试集计算测试集值。这只有在训练集和测试集的值分布相似时才有意义。如果不是这种情况,您可能希望先对每个样本进行归一化。

每个数据集常用的其他增强功能包括过采样、随机通道移位、随机旋转、随机平移和随机缩放。这使您对这些操作保持不变。

【讨论】:

是的,完全适用于数据增强部分。这是良好机器学习模型的关键。 我正在使用均值和标准差值对训练数据集进行均值减法进行归一化。我执行以下程序 scaled_train = (train - train_mean) / train_std_deviation 我还能为数据增强做些什么? scaled_test = (test - train_mean) / train_std_deviation 编辑了我的答案。 谢谢@ThomasPinetz!我已经打乱了数据,我的意思是减法,我在我的 CNN 中添加了 dropout 层,我还添加了正则化器!但是训练损失仍然减少,而验证损失增加并且其准确性也增加。我不知道为什么测试损失会减少!我不知道如何处理这个问题! 您的验证损失增加了?损失应该会减少。无论如何,从启用了颜色条的验证集和启用了颜色条的测试集中绘制自己的图像。这通常会提供额外的见解。

以上是关于当测试和训练数据集来自不同来源时,为啥测试准确性保持不变并且不会增加二进制分类的主要内容,如果未能解决你的问题,请参考以下文章

keras训练完模型,为啥对训练集进行evaluate和训练时的loss完全不一样?白训练了吗?

测试和训练数据集具有不同数量的特征

训练集、验证集和测试集

机器学习 - 训练集验证集测试集

SVM模型进行分类预测时的参数调整技巧

为啥要划分训练集、验证集和测试集