我已经阅读并仔细研究了TFF guide和APIs页面。但是我对功能的用法以及如何控制它们感到困惑。
例如,在教程中,有一个函数负责汇总指标。
@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
,因为它需要__getattr__
的namedTuple)。而且我不理解如何在其他函数的代码主体中使用它们的概念的全部直观认识?
在TFF中,我希望每个功能都可以在服务器端或客户端中放置,但是在任何功能中都可以访问这两个功能,这会使它感到困惑。 谁负责计算? @CLIENT或@SERVER?
有人可以帮我吗?
答案 0 :(得分:0)
也许一个误解是tff.learning.Model
是tff.learning
模块使用的接口,如果没有tff.learning.build_federated_averaging_process()
这样的模块方法,则不需要。当前,联合平均实现没有钩子可以在聚合后但从计算返回之前修改指标。
我强烈建议您查看Custom Federated Algorithms, Part 2: Implementing Federated Averaging,该指南逐步介绍了如何在不使用tff.learning
的情况下实现联合平均,这将允许在任意方向上扩展计算。
其他说明:
aggregate_mnist_metrics_across_clients
是在class MnistModel
的{{3}}方法中返回的,在本教程中仅剩几个单元格。 metrics
参数是tff.learning.Model.federated_output_computation
的返回值。这两种方法都是tff.learning
模块方法(例如tff.learning.build_federated_averaging_process()
)必须实现的接口,以正确的方式连接计算。
在TFF中,我希望每个功能都可以在服务器端或客户端中放置一个位置,但是在任何使它们混淆的功能中都可以访问它们。
在TFF中,数据具有位置,而不是 computations 。可以使用TFF intrinsics (例如tff.federated_mean()
或tff.federated_map()
)将接受未放置值的计算用于放置值。另外,TFF计算可以接受放置在CLIENTS
或SERVER
处的值,并返回放置在其中一个处的值。
如果您还没有的话,我强烈建议您看两部分的教程“自定义联合算法”。它花费时间介绍TFF的编程和执行模型: