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

