TFF:两种类型有什么区别?

问题描述

collected_output=tff.federated_collect(client_outputs)。 详细代码请参考此question

我的问题是照片上用红色标记的部分之间的区别。就 FL 算法而言,我认为 client_outputs 是单个客户端的输出,而 collected_outputSequenceType,因为每个 client_outputs 是组合在一起的。这样对吗?如果我的猜测是正确的,member 是一组带有 client_outputs 的单个客户成员吗?

解决方法

这个术语可能有点棘手。 client_outputs 不完全是“单个客户的输出”,它仍然代表所有 客户输出,但它们不能单独寻址。重要的是,TFF 区分数据存在(“放置”)在客户端,它没有被传达。 collected_outputs 在某种意义上是所有单个客户端输出的流,尽管 位置 已更改(值已通过 tff.federated_collect 传送到服务器)。

再详细一点: 在上面的类型规范中,.membertff.FederatedType 上的一个属性。 TFF 指南 Federated Core > Type System 是有关不同 TFF 类型的更多详细信息的好资源。

{int32}@CLIENTS 表示由一组可能不同的整数组成的联合值,每个客户端设备一个。请注意,我们所说的单个联合值包含出现在网络中多个位置的多个数据项。可以将其视为一种具有“网络”维度的张量,尽管这种类比并不完美,因为 TFF 不允许随机访问联合值的成员组成部分。

在屏幕截图中,client_outputs 也被“放置”了 @CLIENTS(来自 .placement 属性)并遵循类似的语义:它有多个值(每个客户端一个)但单个值是不可寻址(即该值的行为不像 Python list)。

相反,collected_output 放在 @SERVER。那么这个子弹:

<weights=float32[10,5],bias=float32[5]>@SERVER 表示服务器上的权重和偏置张量的命名元组。由于我们去掉了大括号,这表明设置了 all_equal 位,即只有一个元组(无论托管该值的集群中可能有多少服务器副本)。

注意“single tuple”短语,在 tff.federated_collect 之后有一个值序列放置在服务器上。这个序列可以像 stream 一样迭代。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...