低级功能tff.federated_mean(tff.federated_map(fn, data))
将相同的训练功能分配给所有客户端。
有没有办法为客户分配不同的培训功能?
低级功能tff.federated_mean(tff.federated_map(fn, data))
将相同的训练功能分配给所有客户端。
有没有办法为客户分配不同的培训功能?
TFF 并不是真正设计为允许寻址不同组中的客户端。这是设计使然,因为在联邦学习中,通常应该将客户端组视为单个对象。打开大门以区别对待不同的客户似乎会导致收集个人观察的道路,与“一切都在聚合”的理念背道而驰。
然而,这并不意味着这种愿望在 TFF 中不受支持。这里有几个选项。
首先,值得注意的是,当您编写 TFF 时,您通常在三个不同的级别上进行编写。您正在编写纯 TensorFlow 来表达单个计算单元,例如每个客户端将要做什么,或自定义聚合函数。您正在编写“本机 TFF”,因为没有更好的术语来表达编排逻辑,将这些计算单元连接在一起。这方面的例子包括你的电话federated_map
及federated_mean
以上。最后,您正在编写 Python 来驱动您的实验。这方面的一个例子是将 Python 列表传递给在 CLIENTS 接受联合值的计算。
鉴于此,编写对两组客户端进行不同处理的 TFF 计算的一种方法是简单地编写两个不同的 TFF 计算并在这些不同的组上调用它们。也就是说,您可以在python级别保持组拆分,以便 TFF 不知道需要分离这些客户端组。
另一个可能有用的选项是允许客户端选择他们希望运行的计算。这方面的一个例子如下tf_computation
:
@tff.tf_computation(tf.int32)
def foo(x):
if x > 0:
return bar(x)
return baz(x)
wherebar
和baz
也是 的实例tf_computation
。
然后可以将此计算应用于federated_map
单个客户端组。
如果您将客户端组建模为包括一个指示位,则此选项可以与第一个选项有些结合,因此不是tf.data.Dataset
代表放置在 CLIENTS 的数据集的 s 列表,而是表示为第一个元素是数据集的元组列表第二个是允许客户确定他们所在的“组”的 int。
希望这可以帮助!