【问题标题】:In tensorflow federated, how to assign different training functions to different clients?在 tensorflow federated 中,如何将不同的训练功能分配给不同的客户端?
【发布时间】:2019-09-12 02:33:02
【问题描述】:

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

有没有办法为客户分配不同的培训功能?

【问题讨论】:

    标签: tensorflow-federated


    【解决方案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.Datasets 列表,而是表示为元组列表它的第一个元素是数据集,第二个元素是一个 int,允许客户端确定他们所在的“组”。

    希望这会有所帮助!

    【讨论】:

    • 感谢您的解决方案。当然,方式1和方式2都可以。当我尝试实现方式 1 时,除了包含一个指示位之外,我还有另一个问题“如何在 python 级别保持组拆分”。
    • 我只是想在 Python 中保留两个不同的列表,然后将它们分别传递给两个不同的计算
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-29
    • 1970-01-01
    相关资源
    最近更新 更多