我已经阅读并仔细研究了TFF guide和APIs页面。但是我在某些细节部分感到困惑。
例如,当我想包装/装饰TF / python函数时,请使用以下两个API:
1. tff.tf_computation()
2. tff.federated_computation()
我找不到它们之间的区别以及何时可以使用它们。特别是,如果我想使用FedAvg或FedSgd以外的其他算法。我想知道你是否知道:
如何使用它们来操纵输入?他们在@CLIENT或@SERVER上工作吗?
除了
tff.federated_mean
或tff.federated_sum
的输出(该值将在服务器中)以外,如何将它们用于其他用途?我如何能够访问@CLIENT和@SERVER中的数据和指标的详细信息?
为什么要从
tff.tf_computation()
调用tff.federated_computation()
?在此link中,没有关于它们的任何解释。这些API(例如
tff.federated_mean
或tff.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
传达给其他放置位置。类型签名可以接受联合类型(即具有展示位置的类型)。
对于您的问题列表:
两者都可以处理位于CLIENTS
或SERVER
的值。例如,可以将名为tff.tf_computation
的my_comp
应用于类型为v
和int32@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 Classification和Federated 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/