gpt4 book ai didi

machine-learning - 为什么在 MxNet 中标准化标签可以使准确率接近 100%?

转载 作者:行者123 更新时间:2023-11-30 09:33:50 24 4
gpt4 key购买 nike

我正在 MxNet(gluon api)上使用多标签逻辑回归训练模型,如下所述:multi-label logit in gluon我的自定义数据集有 13 个特征和一个形状为 [,6] 的标签。我的特征从原始值标准化为 [0,1]我使用带有 2 个隐藏层的简单密集神经网络。

我注意到,当我不标准化标签时(它采用离散值 1,2,3,4,5,6,并且纯粹是我将分类值映射到这些数字的选择),我的训练过程会慢慢收敛到一些最小值例如:

Epoch: 0, ela: 8.8 sec, Loss: 1.118188, Train_acc 0.5589, Test_acc 0.5716
Epoch: 1, ela: 9.6 sec, Loss: 0.916276, Train_acc 0.6107, Test_acc 0.6273
Epoch: 2, ela: 10.3 sec, Loss: 0.849386, Train_acc 0.6249, Test_acc 0.6421
Epoch: 3, ela: 9.2 sec, Loss: 0.828530, Train_acc 0.6353, Test_acc 0.6304
Epoch: 4, ela: 9.3 sec, Loss: 0.824667, Train_acc 0.6350, Test_acc 0.6456
Epoch: 5, ela: 9.3 sec, Loss: 0.817131, Train_acc 0.6375, Test_acc 0.6455
Epoch: 6, ela: 10.6 sec, Loss: 0.815046, Train_acc 0.6386, Test_acc 0.6333
Epoch: 7, ela: 9.4 sec, Loss: 0.811139, Train_acc 0.6377, Test_acc 0.6289
Epoch: 8, ela: 9.2 sec, Loss: 0.808038, Train_acc 0.6381, Test_acc 0.6484
Epoch: 9, ela: 9.2 sec, Loss: 0.806301, Train_acc 0.6405, Test_acc 0.6485
Epoch: 10, ela: 9.4 sec, Loss: 0.804517, Train_acc 0.6433, Test_acc 0.6354
Epoch: 11, ela: 9.1 sec, Loss: 0.803954, Train_acc 0.6389, Test_acc 0.6280
Epoch: 12, ela: 9.3 sec, Loss: 0.803837, Train_acc 0.6426, Test_acc 0.6495
Epoch: 13, ela: 9.1 sec, Loss: 0.801444, Train_acc 0.6424, Test_acc 0.6328
Epoch: 14, ela: 9.4 sec, Loss: 0.799847, Train_acc 0.6445, Test_acc 0.6380
Epoch: 15, ela: 9.1 sec, Loss: 0.795130, Train_acc 0.6454, Test_acc 0.6471

但是,当我标准化标签并再次训练时,我得到了这个连线结果,显示训练和测试的准确率均为 99.99%:

Epoch: 0, ela: 12.3 sec, Loss: 0.144049, Train_acc 0.9999, Test_acc 0.9999
Epoch: 1, ela: 12.7 sec, Loss: 0.023632, Train_acc 0.9999, Test_acc 0.9999
Epoch: 2, ela: 12.3 sec, Loss: 0.013996, Train_acc 0.9999, Test_acc 0.9999
Epoch: 3, ela: 12.7 sec, Loss: 0.010092, Train_acc 0.9999, Test_acc 0.9999
Epoch: 4, ela: 12.7 sec, Loss: 0.007964, Train_acc 0.9999, Test_acc 0.9999
Epoch: 5, ela: 12.6 sec, Loss: 0.006623, Train_acc 0.9999, Test_acc 0.9999
Epoch: 6, ela: 12.6 sec, Loss: 0.005700, Train_acc 0.9999, Test_acc 0.9999
Epoch: 7, ela: 12.4 sec, Loss: 0.005026, Train_acc 0.9999, Test_acc 0.9999
Epoch: 8, ela: 12.6 sec, Loss: 0.004512, Train_acc 0.9999, Test_acc 0.9999

这怎么可能?为什么标准化标签会以这种方式影响训练准确性?

最佳答案

您链接到的教程进行多类分类。在多标签分类中,示例的标签是一个 one-hot 数组。例如标签 [0 0 1 0] 表示该示例属于类别 2(假设类别以 0 开头)。标准化该向量没有意义,因为值已经在 0 和 1 之间。此外,在多类分类中,只有一个标签可以为 true,而另一个标签必须为 false。 0 和 1 以外的值在多类分类中没有意义。

当表示一批示例时,通常将标签写为整数而不是热数组,以便于阅读。例如标签 [4 6 1 7] 表示第一个示例属于类别 4,第二个示例属于类别 6,依此类推。规范化此表示也没有意义,因为此表示在内部转换为一个热数组。

现在,如果您标准化第二个表示形式,则行为是未定义的,因为浮点不能是数组索引。可能发生了一些奇怪的事情才给你 99% 的准确率。也许您将值标准化为 0 到 1,并且生成的 one-hot 数组主要指向 0 类,很少指向 1 类。这可以为您提供 99% 的准确度。

我建议不要标准化标签。

关于machine-learning - 为什么在 MxNet 中标准化标签可以使准确率接近 100%?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49217210/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com