我在 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。