在tensorflow联合中,如何为不同的客户分配不同的训练功能?

时间:2019-09-12 02:33:02

标签: tensorflow-federated

低级功能tff.federated_mean(tff.federated_map(fn, data))将相同的训练功能分配给所有客户端。

有什么方法可以为客户分配不同的培训功能?

1 个答案:

答案 0 :(得分:1)

TFF并非真正旨在允许寻址不同组中的客户。这是设计使然,因为通常在联合学习中,应将客户群视为单个对象。敞开大门以不同的方式对待不同的客户似乎是在走走收集个人观察的道路,这违背了“一切汇总”的哲学。

但是,这并不意味着TFF不支持这种愿望。这里有一些选择。

首先,值得注意的是,在编写TFF时,通常是在三个不同的级别上进行编写。您正在编写纯TensorFlow来表示各个计算单位,例如每个客户端将要执行的操作或自定义聚合功能。您正在编写“本机TFF”是因为缺少更好的术语来表示业务流程逻辑,将这些计算单元连接在一起。这样的示例包括您对上面的federated_mapfederated_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)

其中barbaz也是tf_computation的实例。

然后可以通过federated_map将此计算应用于单个客户端。

如果您将客户端组建模为包括一个指示符位,则该选项可能与第一个选项相结合,因此,它代替了表示放置在CLIENTS上的数据集的tf.data.Dataset的列表,而是表示为一个列表的元组,其第一个元素是数据集,第二个是int,允许客户确定他们所在的“组”。

希望这会有所帮助!