<项目介绍> 簇联邦学习改进python实现源码+项目说明+代码注释(提高精度+缓解用户孤立问题).zip 该资源内项目源码是个人的毕设,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到94.5分,放心下载使用! 该资源适合计算机相关专业(如人工智能、通信工程、自动化、软件工程等)的在校学生、老师或者企业员工下载,适合小白学习或者实际项目借鉴参考! 当然也可作为毕业设计、课程设计、课程作业、项目初期立项演示等。如果基础还行,可以在此代码基础之上做改动以实现更多功能。 本人硕士一年级在读,专注于边缘计算方向,目前主要关注联邦学习的内容。在解决数据的non-IID过程中,有一个想法,并且用代码做了一个小实验。 想法:现实世界中,non-IID非常普遍,但是也不是完全非独立同分布的,因为物以类聚人以群分。那么我们能不能用聚类的方法进行学习?将每一个设备上训练的参数上传后,首先进行聚类,将相似的设备分为一类。划分一个个簇以后,每一个簇内进行联邦学习。 当然,利用聚类的方法解决non-IID问题的论文也有,如:An Efficient Framework for Clustered Federated Learning.(NIPS2020);ON THE BYZANTINE ROBUSTNESS OF CLUSTERED FEDERATED LEARNING。但是存在问题:1.高昂的计算开销和通信开销,每次传输所有的簇模型、通过计算在本地数据的损失确定簇,2.簇个数已知,但是现实世界往往很难确定簇个数,3.簇内相对孤立,无法考虑其他簇模型对自己的影响等。为了解决上述问题,我们提出动态簇连邦学习,通过动态确定簇个数,同时学习其他簇知识,提高在non-IID上得性能。 2.文件结构 cache : 存放产生的模型文件 clients_and_server init.py clients.py :产生用户需要用到 cluster.py : 聚类算法 server.py : 产生云服务 data : 存放下载相应的数据集 data_and_model init.py datasets.py : 产生相应的数据集 models.py : 产生模型 result : 存放实验结果 main:主程序 plot: 画图 3.详细描述文件 3.1 cache文件夹 这个文件夹内存放模型训练的结果,包括用户的模型和簇模型 3.2 clients_and_server文件夹 这个文件夹包含三个文件,clients、cluster和server文件。 3.2.1 clients文件 这个文件用来定义一个用户,一个用户的信息:自身标号、簇编号、模型、训练测试数据、学习率、优化器、训练次数等。包含6个函数:get_cluster_modal、get_model、local_train、pre_train、test_model和updata_clu get_cluster_modal:用来获得簇模型。在整体每一轮循环中,簇内部训练L轮会簇内部聚合,簇内部聚合的模型送到簇内的每一个用户。 get_model:获得全局模型。全局模型训练完成后,将所有的簇模型再平均一下,得到全局模型(这样,不会因为某一类的用户数量过少,导致聚合的时候“话语权”较小),将全局模型送到每一个用户手里,然后开始下一轮训练。 local_train:模型在本地训练 pre_train:模型聚类之前,首先需要预训练,获得一个描述本身数据的模型 test_model:测试模型,返回accuracy updata_clu:模型聚类之后,更新所在簇的编号。 3.2.2 cluster文件 本文件是对用户进行聚类,一共使用三种聚类方式:k均值、层次聚类和密度聚类。另外2个函数load_clients和distance函数,第一个函数是加载所有用户模型,将字典类型变成list类型,第二个函数是计算两个模型之间的距离。 K_means_cluster,Hierarchical_clustering分别是k均值和层次聚类。Density_clustering表示密度聚类,并没有给出代码。在实验的过程中,我们发现k均值是完全可以满足我们的要求的,而层次聚类不能满足。 3.2.3 server文件 本文件包含一个云服务类,用于定义云服务端,以及簇模型。 aggregate_model:用于将所有簇模型聚合 gain_acc:测试每个簇的精度 aggregate_cluster:簇内部模型聚合 3.3 data文件夹 本文件夹用于存放数据集,本实验可以采用MNIST、CIFAR10、EMNIST和FMNIST数据集
- 1
- 2301_777155612024-04-08资源内容详尽,对我有使用价值,谢谢资源主的分享。
- 粉丝: 5623
- 资源: 3567
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助