我已经阅读并仔细研究了TFF guideAPIs页面。但是我在某些细节部分感到困惑。

例如,当我想包装/装饰TF / python函数时,请使用以下两个API:

1. tff.tf_computation()
2. tff.federated_computation()


我找不到它们之间的区别以及何时可以使用它们。特别是,如果我想使用FedAvg或FedSgd以外的其他算法。我想知道你是否知道:


如何使用它们来操纵输入?他们在@CLIENT或@SERVER上工作吗?
除了tff.federated_meantff.federated_sum的输出(该值将在服务器中)以外,如何将它们用于其他用途?
我如何能够访问@CLIENT和@SERVER中的数据和指标的详细信息?
为什么要从tff.tf_computation()调用tff.federated_computation()?在此link中,没有关于它们的任何解释。
这些API(例如tff.federated_meantff.federated_sum)是否修改每个@CLIENT的输出元素并将它们带到@SERVER?


有人可以帮助我理解这个概念背后的直觉吗?

最佳答案

关于不同函数装饰器的可能经验法则:


tff.tf_computation用于包装TF逻辑。想想“张量输入,张量输出”:这应该与tf.function的用法非常相似,其中参数和返回值是张量或张量的嵌套结构。 TFF内部函数(例如tff.federated_mean)不能在tff.tf_computation内使用,并且tff.tf_computations不能调用tff.federated_computations。类型签名始终处于未放置状态。
tff.federated_computation应该用于包装TFF编程抽象。想想“这里的张量,那里的张量”:在这种情况下,可以将tff.tf_computation应用于tff.Value,并且可以使用内在函数将tff.Value传达给其他放置位置。类型签名可以接受联合类型(即具有展示位置的类型)。


对于您的问题列表:


两者都可以处理位于CLIENTSSERVER的值。例如,可以将名为tff.tf_computationmy_comp应用于类型为vint32@CLIENTS的值tff.federated_map(my_comp, v),该值将在每个客户端上运行my_comp
tff.federated_map()支持将点对点计算(跨客户端)应用于不在服务器上的数据。您可以使用tff.federated_map在每个客户端上操纵指标。 TFF不适用于不同客户的单独选项;抽象不支持针对个人。您也许可以在Python中对此进行模拟,请参见Operations performed on the communications between the server and clients
只需在tff.Computation中返回它们并调用该计算,就可以在仿真中检查放置数据的值。这些值应在Python环境中可用。
tff.tf_computation应该可以从任何地方调用,如果有说明文档,请另外指出。我认为要突出显示的是tff.federated_computation可以调用tff.tf_computation,反之亦然。
教程(Federated Learning for Image ClassificationFederated Learning for Text Generation)显示了在模拟中打印指标的示例。您可能也对how to print local outputs in tensorflow federated?的答案感兴趣
如果需要,应直接执行tff.tf_computations。这将避免TFF的任何联邦部分,而只需委托给TensorFlow。要将计算应用于联合值并与联合内部函数结合使用,必须在tff.federated_computation内部调用它们。

关于python - 如何使用TFF API进行自定义使用?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56529169/

10-12 20:04