问题描述
我想知道创建模型的最简单方法,使用 tensorflow 联合广播它,运行一个循环并收集客户端返回的权重,而不用 fedavg 聚合它们。
解决方法
TFF 为此提供了 tff.federated_collect
内在函数;它在服务器上实现了客户端数据流。
将其连接到大多数存在的联邦过程的内部的一种简单方法是派生 simple_fedavg
,我认为这是使用 TFF 的较低级别功能的合理起点。
这里有几点需要注意。首先,据我所知,没有任何“生产”系统支持 federated_collect
。其次,根据您的愿望,可能有一个更简单、更直接的解决方案:只需返回客户端权重。 TFF 运行时将具体化客户端权重的 Python 列表(我相信是渴望张量),您可以在其上执行任意的 Python 后处理。
要从 simple_fedavg
到达这里,您可以有效地 return the client_outputs
directly 而不是将它们传递给 tff.federated_mean
。这将为您提供客户端增量(即,最终客户端权重与初始客户端权重之间的差异);但是,如果需要,您可以简单地修改 client_update
以避免计算这种差异。