Почему я выделяю 600 примеров клиенту, а 700 обучаю модели в TFF? - PullRequest
0 голосов
/ 10 апреля 2020

Я столкнулся со странной проблемой, когда использовал свой созданный набор данных в 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.

...