极其随机的验证损失/准确性

数据挖掘 喀拉斯 张量流 图像分割
2022-03-04 07:51:14

我正在对卫星数据训练 DNN。数据中的类分布极其不平衡,因此我使用随机多数欠采样来训练神经网络,以人为地平衡每个类的训练示例数量。在验证期间,我不会以任何方式重新采样数据。

作为时代函数的损失。 橙色是训练损失,蓝色是验证。

跨时代的准确性。 橙色是训练,蓝色是验证。

在上图中,橙色是训练性能,蓝色是验证。验证准确度和损失值比训练准确度和损失要嘈杂得多。尽管训练准确度约为 90%,但验证准确度甚至一度达到 0.2%。为什么验证指标会疯狂波动,而训练指标却保持相当稳定?

有关模型/数据的一些附加信息:

我正在使用 U-Net 模型将卫星图像分割成三个土地覆盖类别。与原始论文相比,U-Net 模型每层的过滤器数量减少了一半,并且我在每次卷积之后和激活之前应用了批量归一化。该模型是使用 Adam 优化器从头开始训练的,初始 lr=0.001 和阶跃衰减计划,优化(未加权)分类交叉熵。U-Net 在每个卷积层上应用了 l2 权重正则化,常数为 0.01。

训练和验证数据都是浮点图像,取值范围为 0-2。两个数据集的图像是从同一空间区域采样的。由于计算开销,我不做任何预处理或数据扩充。

验证集在第 1 类中有 317k 像素,在第 2 类中有 2650 万像素,在第 3 类中有 2780 万像素(这是“真实”数据分布)。包含第 1 类像素的训练实例数量约为 3500 个中的 200 个。训练集(其中第 1 类被空间过采样以人为地平衡训练集)由 58M 类 1 像素、166M 类 2 像素和127M 3 级像素。在 20k 个训练实例中,大约 8200 个包含 1 类像素。

在向模型提供数据时,我从三个数据集中分别以 0.4、0.3 和 0.3 的概率对 1、2 和 3 类进行采样。

编辑:问题解决了!在处理神经网络和地理空间数据时,在测试/训练/验证集之间保持相同的地图投影非常重要。我以为我用来提取测试/训练/验证数据的软件可以确保集合之间的投影相同,但我错了。使测试/训练/验证数据的预测相同解决了我的问题。本质上,我是在一个与我训练时不同的数据集上进行验证,这不是机器学习模型应该被验证的方式。

1个回答

正如“为什么验证准确性会波动?”中已经指出的那样,这种行为可能有几个原因。

  • 训练/验证步骤的大小:验证集越小,波动可能会变得越强,尤其是在训练的早期阶段,预测更接近随机预测。

  • 过度拟合:训练损失似乎很低,准确率超过 90%。如果您过度拟合,验证集上的预测将变得几乎是随机的,并且您会观察到这种波动。

  • 随机验证集:如果您的验证集在所有时期都不是恒定的,则验证损失将是不同的,并且无法再比较来自不同时期的损失。特别是如果您的课程不平衡。

  • 加权损失函数:对不平衡的数据集使用加权损失函数会使您的损失显得更加随机,尤其是在训练的早期阶段以及如果训练集和验证集的分布不匹配。

也许您可以将其他信息共享给您的数据、预处理、训练、模型等,这样更容易更准确地找出原因。