我正在通过 tensorflow-federated 实施联合学习。本教程和所有其他可用材料在每一轮通信之后比较了联合(全局)模型的准确性。有没有一种方法可以计算每个本地模型的准确性以与联合(全局)模型进行比较。
摘要:客户端总数:15 每轮通信:本地与联合模型性能
参考:
我正在通过 tensorflow-federated 实施联合学习。本教程和所有其他可用材料在每一轮通信之后比较了联合(全局)模型的准确性。有没有一种方法可以计算每个本地模型的准确性以与联合(全局)模型进行比较。
摘要:客户端总数:15 每轮通信:本地与联合模型性能
参考:
我不知道你怎么能做到这一点,tff.learning.build_federated_averaging_process
但我建议你看看这个简单的 fedavg 实现。在这里,您可以为每个客户端使用 test_data - 您在服务器模型中使用的相同评估数据集。我建议你这样做client_test_datasets = [test_data for x in sampled_train_ids]
。然后将其传递为iterative_process.next(server_state, sampled_train_data, client_test_datasets )
. 在这里,您需要更改 和run_one_round
的client_update_fn
签名simple_fedavg_tff.py
。在每种情况下,测试数据集的签名应与训练数据集的签名相同。不要忘记实际传递适当的测试数据集作为每个的输入。现在继续simple_fedavg_tf.py
并更改您的client_update
. 在这里,您基本上需要编写与为服务器模型所做的评估非常相似的评估。此后,如果您愿意,可以打印评估结果或更改每个级别的输出(tf.function, tff.tf_computation, and tff.federated_computation)
并将评估结果作为输出传递。如果你这样走,别忘了更新输出iterative_process.next
编辑:当测试数据集与服务器测试数据集相同时,我假设您想要客户端的准确性。