1

我创建了一个非 IID 数据集,其中我将 60000 个示例(10 个类,每个类有 6000 个示例)划分为 200 个片段,每个片段有 300 个示例。有 100 个客户端,我随机分配 2 个片段给每个客户端。这是一些客户的情况。 部分客户的情况

我使用这个数据集来训练我的 TFF 模型。训练集的准确率约为 0.99,而测试集的准确率仅为 0.5 左右。我尝试了很多次,但没有改变。而且我认为该模型可能过度拟合,因此我添加了两个 dropout 进行测试,但我得到了相同的结果。然后我将 relu() 函数更改为leakyrelu(),并将优化器函数从 SGD 更改为 Adam,但准确度也在 0.5 左右。我不知道为什么。我知道非 IID 会导致准确性下降,而 FedAvg 可以缓解它。TFF 使用 FedAvg 来聚合客户端模型,这意味着我已经使用 FedAvg 作为我的底层结构,对吗?但为什么我的准确率这么低?

4

1 回答 1

0

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

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

Reddi 2020中发现,如果在服务器上使用自适应优化器(例如 Adam/Yogi),则需要调整 epsilon 参数以获得最佳性能。为 SGD 增加动力也显着提高了收敛速度。

于 2020-05-09T17:28:22.087 回答