Path: blob/master/site/zh-cn/federated/tutorials/federated_select.ipynb
25118 views
Kernel: Python 3
Copyright 2021 The TensorFlow Authors.
In [ ]:
使用 tff.federated_select 向特定客户端发送不同的数据
本教程演示了如何在 TFF 中实现需要向不同客户端发送不同数据的自定义联合算法。您可能已经熟悉 tff.federated_broadcast
,它用于向所有客户端发送单个服务器布局的值。本教程侧重于将基于服务器的值的不同部分发送到不同客户端的情况。这对于在不同客户端之间分配模型的各个部分以避免将整个模型发送到任何单个客户端可能十分有用。
首先,导入 tensorflow
和 tensorflow_federated
。
In [ ]:
In [ ]:
根据客户数据发送不同的值
考虑这样一种情况,我们有一些服务器布局的列表,我们希望根据一些客户端布局的数据从该列表向每个客户端发送一些元素。例如,服务器上的字符串列表,以及客户端上要下载的以逗号分隔的索引列表。我们可以通过以下代码实现:
In [ ]:
随后,我们可以通过为每个客户端提供服务器布局的字符串列表以及字符串数据来模拟我们的计算:
In [ ]:
[<tf.Tensor: shape=(), dtype=string, numpy=b'a,b'>,
<tf.Tensor: shape=(), dtype=string, numpy=b'b,c'>,
<tf.Tensor: shape=(), dtype=string, numpy=b'c,a'>]
向每个客户端发送随机化元素
另外,将服务器数据的随机部分发送到每个客户端可能很有用。我们可以通过先在每个客户端上生成一个随机密钥,然后按照与上面使用的类似的选择过程来实现此目的:
In [ ]:
我们的 broadcast_random_element
函数不接受任何客户端布局的数据,因此,我们必须为 TFF 模拟运行时配置要使用的默认客户端数量:
In [ ]:
随后,我们可以模拟选择。我们可以更改上面的 default_num_clients
和下面的字符串列表以生成不同的结果,或者简单地重新运行计算以生成不同的随机输出。
In [ ]: