A bug encountered when using fed_cifar100 in centralized settings.
- 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
Assessment
This issue has not been assessed yet.