当我在TFF中使用创建的数据集时遇到了一个奇怪的问题。我创建了一个用于联合培训的数据集,在其中分配了5个客户示例,如下所示:600 600 300 700300。但是,当我在模型中对其进行培训时,我发现示例数量为600 600 600 600700。我感到非常困惑。然后,我打印了我创建的数据集的过程信息,并检查了数据集的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。
在这里结束循环:由于TFF sorts它返回的客户ID,所以通常不能依赖客户ID的顺序与构造顺序相同。