【发布时间】:2019-09-12 02:33:02
【问题描述】:
低级函数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)
其中bar 和baz 也是tf_computation 的实例。
然后可以通过federated_map 将该计算应用于单个客户端组。
如果您将客户端组建模为包含一个指示位,则此选项可以与第一个选项有些结合,因此不是表示放置在 CLIENTS 的数据集的 tf.data.Datasets 列表,而是表示为元组列表它的第一个元素是数据集,第二个元素是一个 int,允许客户端确定他们所在的“组”。
希望这会有所帮助!
【讨论】: