0

我在 TFF 中使用创建的数据集时遇到了一个奇怪的问题。我为联邦训练创建了一个数据集,其中我分配了 5 个客户端示例,如下所示:600 600 300 700 300。但是当我在模型中训练它们时,我发现示例的数量是 600 600 600 600 700。我很困惑。然后,我打印了我创建的数据集的进程信息,并查看了数据集的HDF5文件,它们都是600 600 300 700 300。我用这段代码查看了HDF5文件中有多少客户端的示例,结果是 700:

len(f3["examples"][client_ids[3]]["label"].value)

我使用这段代码来实例化数据集并查看客户端中有多少示例:

BAL3 = tff.simulation.hdf5_client_data.HDF5ClientData("BAL3.hdf5")

    num_clients_BAL3 = len(BAL3.client_ids)

    example_dataset = BAL3.create_tf_dataset_for_client(
        BAL3.client_ids[3]
    )
    example_element = next(iter(example_dataset))
    n = 0
    iter_ = iter(example_dataset)
    while(iter_):
      next(iter_)
      n = n+1
      print(n) #n stop at 600

我使用此代码来实例化第三个客户端的数据集并进行调试:

BAL3 = tff.simulation.hdf5_client_data.HDF5ClientData("BAL3.hdf5")

example_dataset = BAL3.create_tf_dataset_for_client(
    BAL3.client_ids[3]
)
example_element = next(iter(example_dataset))
n = 0
iter_ = iter(example_dataset)
while(n < 601): #n<600 can work well
  example_element = next(iter_)
  n = n+1
  #print(n)

print(example_element['label'].numpy() )
plt.imshow(example_element['pixels'].numpy(), cmap='gray', aspect='equal')
plt.grid(False)
_=plt.show()

我在创建数据集时分配了第三个客户端 700 个示例。但是当我迭代这个客户端的数据时,我发现它显示了 600 个示例。tff HDF5 文件也显示 700。

4

1 回答 1

0

在这里结束循环:由于 TFF对它返回的客户端 ID 进行排序,因此通常不能依赖客户端 ID 中的排序与构造顺序相同。

于 2020-05-11T19:19:51.603 回答