KarhouTam / FL-bench

Benchmark of federated learning. Dedicated to the community. 🤗
GNU General Public License v3.0
503 stars 82 forks source link

生成Cifar100数据集时报错KeyError: 19 #81

Closed Masterchef2000 closed 4 months ago

Masterchef2000 commented 4 months ago

生成Cifar100数据集时,--super_class参数指定为20,报错KeyError: 19

Traceback (most recent call last): File "/FL-bench/generate_data.py", line 379, in main(args) File "/FL-bench/generate_data.py", line 59, in main dataset = DATASETS[args.dataset](dataset_root, args) File "/FL-bench/data/utils/datasets.py", line 420, in init new_targets.append(mapping[self.classes[cls]]) KeyError: 19

列表下标越界

我认为是classes的定义不对,正确的应该是获取Cifar100数据集中所有类的真实值,这样才对应得上mapping的键值

即将 self.classes = list(range(100))

改为

        class_names = test_part.classes
        class_names_list = list(class_names)
        self.classes = class_names_list

这样就可以生成Cifar100数据集了 个人愚见,不知对否,大佬看看

KarhouTam commented 4 months ago

感谢指出,已修正。 另外,不需要 --super_class 20,这里只需要将 --super_class 指定为不为 0 的数即可。这个 arg 本质上应该是 bool 属性。

python generate_data.py -d cifar100 -a 0.1 -cn 20 --super_class 1

结果如下: image