FedML-AI / FedML-AI/FedML

A bug encountered when using fed_cifar100 in centralized settings.

Open
#805 2 comments 0 reactions 0 assignees View on GitHub
help wanted
Dominant language
Python
Stars
4.1k
Forks
765
PR merge metrics
No merged PRs in 30d

Description

When using fed_cifar100 in centralized settings, I encountered a bug. In the file `fedml/data/data_loader.py`, line 559 constructs the `test_data_local_dict` in the following way:

``` python
test_data_local_dict = {
0: [batch for cid in sorted(test_data_local_dict.keys()) for batch in test_data_local_dict[cid]]
}
```
However, in the file `fedml/data/fed_cifar100/data_loader.py`, only 100 clients have a local test set while there are 500 clients with local training sets.

```python
DEFAULT_TRAIN_CLIENTS_NUM = 500
DEFAULT_TEST_CLIENTS_NUM = 100
```
This causes all dataloaders for client IDs 200 to 500 in the `test_data_local_dict` dictionary to be None, making them unsuitable as iterators in the list comprehension.

Here is a temporary solution, but a more formal fix may be necessary:

``` python
tmp = {0 : []}
for cid in sorted(test_data_local_dict.keys()):
if (test_data_local_dict[cid] != None):
for batch in test_data_local_dict[cid]:
tmp[0].append(batch)
test_data_local_dict = tmp
```

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.