我想知道,为了操纵模型的指标,我看到federated_train_data
亏损还是federated_test_data
亏损?
我读了这个:
训练损失看起来比评估损失要好得多:当使用联合平均(用于图像分类的联合学习中使用的优化算法)时,需要仔细解释指标,因为它们与集中式模型训练之间存在细微的差异。尤其是训练损失,这是许多序列步骤或批次中的平均值。这意味着在一轮之后,每个客户可能都非常适合于本地数据模型(获得了较高的准确性),但是在将这些更新平均到全局模型中之后,全局模型可能仍然远离“良好”状态,从而导致测试精度低。另外,十轮可能太少;关于联合学习的原始学术论文之一显示,使用IID数据至少进行了20轮,直到达到99%的准确性(McMahan 2016),使用非IID数据进行了100轮以上的研究。
所以我想知道使用此代码对哪种方法更好:
evaluation = tff.learning.build_federated_evaluation(model_fn)
test_metrics = evaluation(state.model, federated_test_data)
或者这个:
evaluation = tff.learning.build_federated_evaluation(model_fn)
metrics = evaluation(state.model, federated_train_data)
谢谢
答案 0 :(得分:0)
概述的选项没有内在的好坏。它基于不同的数据计算相同的指标。哪一个“更好”实际上取决于您需要什么。
所引用的段落并不像您在下面概述的那样引用评估中的指标,而是引用了在联合学习中训练过程中计算的指标。警告您,训练损失的含义可能与您习惯于其他(非FL)机器学习设置的含义有所不同。那是因为在局部训练期间的各个梯度步骤之间,相对于不同模型有效地计算了损失。因此,在通过监视训练损失得出结论时应该小心。