为什么我创建了一个像McMahan论文中的FedAvg那样的非IID数据集,但这个数据集的测试精度只有0.5?

问题描述 投票:0回答:1

我创建了一个非IID数据集,我把60000个例子(10个类,每个类有6000个例子)分成200个片段,每个片段有300个例子。有100个客户端,我给每个客户端随机分配了2个碎片。这就是部分客户的情况。部分客户机的情况

我使用这个数据集来训练我的TFF模型。训练集的准确率约为0.99,但测试集的准确率只有0.5左右。我尝试了很多次,但是没有变化。我想可能是模型过度拟合了,所以我在测试中加入了两个dropout,但结果还是一样。然后我把relu()funcion改成leakyrelu(),把优化器函数从SGD改成Adam,但是精度也是0.5左右。我不知道为什么。我知道Non-IID会导致精度下降,而FedAvg可以缓解这个问题。TFF使用FedAvg来聚合客户模型,这意味着我必须使用FedAvg作为我的底层结构,是吗?但是为什么我得到的准确率这么低呢?

python tensorflow imbalanced-data tensorflow-federated
1个回答
0
投票

客户端和服务器优化器的学习率对于决定模型的最终精度非常重要。

非常高的客户端学习率会导致高 训练 准确性,因为 客户端本地 训练过程中的过度适应 客户端本地 数据(合成拆分中创建的两个类)。然而这些过拟合模型可以被平均到很少的更新的 全球性 的模式。降低客户的学习率在这里是有帮助的。

Reddi 2020 发现如果在服务器上使用自适应优化器(如AdamYogi),为了获得最佳性能,调整epsilon参数是必要的。在SGD中加入动量对收敛率也有显著的改善。

© www.soinside.com 2019 - 2024. All rights reserved.