【发布时间】:2020-11-23 14:36:43
【问题描述】:
我正在 TensorFlow Federated (TFF) 中测试一些算法。在这方面,我想在具有不同“级别”数据异质性(即非独立同分布)的同一个联合数据集上测试和比较它们。
因此,我想知道是否有任何方法可以自动或半自动方式控制和调整特定联合数据集中非独立同分布的“级别”,例如通过 TFF API 或传统的 TF API(可能在 Dataset utils 中)。
为了更实用:例如,TFF 提供的 EMNIST 联合数据集有 3383 个客户端,每个客户端都有自己的手写字符。然而,这些本地数据集在本地示例的数量和表示的类方面似乎相当平衡(所有类或多或少都在本地表示)。 如果我想要一个联合数据集(例如,从 TFF 的 EMNIST 开始),那就是:
- 病理学上非 IID,例如,客户端仅持有 N 个类别中的一个类别(总是指分类任务)。这是
tff.simulation.datasets.build_single_label_datasetdocumentation here的目的吗。如果是这样,我应该如何从联合数据集(例如 TFF 已经提供的数据集)中使用它?; - 本地示例数量不平衡(例如,一个客户端有 10 个示例,另一个客户端有 100 个示例);
- 两种可能性;
我应该如何在 TFF 框架内继续准备具有这些特征的联合数据集?
我应该手工做所有的事情吗?或者你们中的一些人对自动化这个过程有什么建议吗?
另一个问题:在 Hsu 等人的这篇论文 "Measuring the Effects of Non-Identical Data Distribution for Federated Visual Classification" 中,他们利用 Dirichlet 分布来合成一组不同的客户端,并使用 浓度参数 来控制客户之间的一致性。这似乎是一种易于调整的方式来生成具有不同异质性水平的数据集。任何关于如何在 TFF 框架内实现此策略(或类似策略)的建议,或者仅在 TensorFlow (Python) 中考虑一个简单的数据集(例如 EMNIST),都会非常有用。
非常感谢。
【问题讨论】:
标签: python tensorflow tensorflow2.0 tensorflow-federated