Closed realcly closed 1 year ago
Hi, @realcly ,首先感谢你对这个开源仓库的关注。 针对你的问题,我感觉或许是 python 版本不对引起的。请问你运行代码所使用的 python 版本是?
Hi, @realcly ,首先感谢你对这个开源仓库的关注。 针对你的问题,我感觉或许是 python 版本不对引起的。请问你运行代码所使用的 python 版本是?
我使用的是Python 3.8.10
我使用的 python 版本为 3.10.10,在 ubuntu 22.04 下运行
python generate_data.py --semantic 1 -d mnist -cn 20
以下为终端输出:
我使用的 python 版本为 3.10.10,在 ubuntu 22.04 下运行
python generate_data.py --semantic 1 -d mnist -cn 20
以下为终端输出:
好的,我再试一试,谢谢!
以下是我在本地运行 FL-bench 所使用到的库的具体版本:
今天我刚更新了使用 docker 来构建运行环境的特性,或许你可以试试🤗。
以下是我在本地运行 FL-bench 所使用到的库的具体版本:
今天我刚更新了使用 docker 来构建运行环境的特性,或许你可以试试🤗。
好的再次感谢!我继续调试一下。
以下是我在本地运行 FL-bench 所使用到的库的具体版本:
今天我刚更新了使用 docker 来构建运行环境的特性,或许你可以试试🤗。
再次问您好!按照你的建议,我将python版本替换为3.10.10,数据集生成的问题已解决,谢谢!
但在按照demo测试时,即:
生成的结果似乎并不是意料之中的,测试准确率不是一个平滑收敛的曲线,第一轮通信就能达到80%嘛? 我接着运行了moon算法,结果还是大致是这样 想请问这是什么原因呢?准确率评估和存储准确率的excel/csv相关的代码我好像找了好久都没看到在哪个文件。还麻烦您赐教!
你提出了两个问题:
答案是:
demo 中的 -a 0.1 -cn 100
指的是根据狄利克雷分布 $Dir(0.1)$ 将 cifar-10 分割成 100 个子集,每个子集对应一个客户端数据集。而 $Dir(0.1)$ 加上切分成 100 份在 cifar-10 上是一种非常强的 niid,基本上所有的传统 FL 方法(比如 FedAvg, MOON)在这种设置之上都会表现得不如人意。你可以试试用 FedPer 等个性化 FL 方法,你会发现算法仍然会收敛。其根本原因就是针对强 niid 设置,目前仍然没有传统联邦学习方法能够训练出一个令人满意的全局模型。那为什么 test_after
比 test_before
高那么多,因为每个客户端的数据量很少,全局模型经过多轮的本地训练后其实就能比较好地拟合本地的小数据集。
csv 文件通常被存放在 out/${algo}
文件夹中(比如 out/FedAvg/cifar10_acc_metrics.csv
)。 计算 acc 的相关代码在 src/server/fedavg.py
中的 test()
和 log_info()
你提出了两个问题:
- 不理解为什么 acc 曲线如此曲折
- 不知道记录 acc 的 csv 文件在哪
答案是:
- demo 中的
-a 0.1 -cn 100
指的是根据狄利克雷分布 Dir(0.1) 将 cifar-10 分割成 100 个子集,每个子集对应一个客户端数据集。而 Dir(0.1) 加上切分成 100 份在 cifar-10 上是一种非常强的 niid,基本上所有的传统 FL 方法(比如 FedAvg, MOON)在这种设置之上都会表现得不如人意。你可以试试用 FedPer 等个性化 FL 方法,你会发现算法仍然会收敛。其根本原因就是针对强 niid 设置,目前仍然没有传统联邦学习方法能够训练出一个令人满意的全局模型。那为什么test_after
比test_before
高那么多,因为每个客户端的数据量很少,全局模型经过多轮的本地训练后其实就能比较好地拟合本地的小数据集。- csv 文件通常被存放在
out/${algo}
文件夹中(比如out/FedAvg/cifar10_acc_metrics.csv
)。
谢谢您的回复!第一个问题醍醐灌顶!我继续研究以方便后续交流。 对于第二个问题,我想确定一下:评估模型测试准确率(以及生成“out”文件夹中的图片、csv和log)都是调用FL-bench/src/server/fedavg.py中的代码吗?如:
谢谢您的回复!第一个问题醍醐灌顶!我继续研究以方便后续交流。 对于第二个问题,我想确定一下:评估模型测试准确率(以及生成“out”文件夹中的图片、csv和log)都是调用FL-bench/src/server/fedavg.py中的代码吗?如:
嗯,FedAvgServer
相当于一个基类,FL-bench 中实现的所有算法都基于此。我将所有共用的方法都是实现在里面。当然或许某些 FL 方法可能会有自己的 test()
(我记不清了),那样的话会在它们自己相应的文件中重新实现该方法。
谢谢您的回复!第一个问题醍醐灌顶!我继续研究以方便后续交流。 对于第二个问题,我想确定一下:评估模型测试准确率(以及生成“out”文件夹中的图片、csv和log)都是调用FL-bench/src/server/fedavg.py中的代码吗?如:
嗯,
FedAvgServer
相当于一个基类,FL-bench 中实现的所有算法都基于此。我将所有共用的方法都是实现在里面。当然或许某些 FL 方法可能会有自己的test()
(我记不清了),那样的话会在它们自己相应的文件中重新实现该方法。
好的,谢谢,后续继续学习、向您交流和请教。
如果没有其他问题的话,我就 close issue 了🤗。 有别的问题也欢迎 open issue,我有空时就会帮你解答。
如果没有其他问题的话,我就 close issue 了🤗。 有别的问题也欢迎 open issue,我有空时就会帮你解答。
嗯嗯好的谢谢🤗
非常感谢这个联邦学习算法仓库,然而在运行时却出现了一个问题,求教。
python generate_data.py -d cifar10 -a 0.1 -cn 100
Traceback (most recent call last): File "generate_data.py", line 16, in
from utils.schemes import (
File "/root/FL-bench-master/data/utils/schemes/init.py", line 5, in
from .semantic import semantic_partition
File "/root/FL-bench-master/data/utils/schemes/semantic.py", line 22, in
from src.config.utils import get_best_device
File "/root/FL-bench-master/src/config/utils.py", line 69, in
src: Union[OrderedDict[str, torch.Tensor], torch.nn.Module],
TypeError: 'type' object is not subscriptable
生成数据集时出现了这个报错,还没有找到解决办法。