0

我已经准确地阅读和研究了 TFF指南API页面。但我对这些功能的使用以及如何控制它们感到困惑。

例如,在教程中,有一个函数负责聚合指标。

     @tff.federated_computation
     def aggregate_mnist_metrics_across_clients(metrics):
       return {
       'num_examples': tff.federated_sum(metrics.num_examples),
       'loss': tff.federated_mean(metrics.loss, metrics.num_examples),
       'accuracy':tff.federated_mean(metrics.accuracy,metrics.num_examples)
    }

它在MODEL类中调用。但是在类中调用度量之后,我需要访问度量的元素。我想在模型中调用后修改指标并在其他函数中调用它们。
但是,例如,我不能调用它们(例如,使用tff.Type诸如.type_signature,因为它需要 namedTuple __getattr__)。而且我不明白它们如何在其他函数的代码体中使用的概念背后的直观概念?
在 TFF 中,我希望每个函数在服务器端或客户端都有一个位置,但是它们都可以在任何函数中访问,这会让人感到困惑。谁负责计算?@CLIENT 还是 @SERVER?
谁能帮助我?

4

1 回答 1

0

也许一个误解是模块tff.learning.Model使用的接口,如果没有任何模块方法(例如. 目前,联合平均实现没有挂钩来修改聚合后的度量,但在从计算返回之前。tff.learningtff.learning.build_federated_averaging_process()

我强烈建议您查看Custom Federated Algorithms, Part 2: Implementing Federated Averaging,其中逐步介绍了如何在不使用的情况下实现 Federated Averaging tff.learning,这将允许在任何所需的方向上扩展计算。

补充说明:

aggregate_mnist_metrics_across_clients正在以 的tff.learning.Model.federated_output_computation方法返回class MnistModel,教程中的几个单元格。参数是的metrics返回值tff.learning.Model.report_local_outputs()。这两种方法都是需要为tff.learning模块方法(例如tff.learning.build_federated_averaging_process())实现的接口,以便以正确的方式连接计算。

在 TFF 中,我希望每个函数在服务器端或客户端都有一个位置,但是它们都可以在任何函数中访问,这会让人感到困惑。

在 TFF 中,数据有位置,而不是计算。接受未放置值的计算可用于使用 TFF内在函数(例如tff.federated_mean()tff.federated_map())放置的值。此外,TFF 计算可以接受放置在CLIENTS或的SERVER值,也可以返回放置在其中的值。

如果您还没有,我强烈建议您查看两部分教程自定义联合算法。它花时间介绍了TFF的编程和执行模型:

于 2019-06-11T17:02:34.893 回答