Clustered Federated Learning 论文源码阅读笔记
本篇文章的阅读论文是《Clustered Federated Learning: Model-Agnostic Distributed Multitask Optimization Under Privacy Constraints》,主要是对论文的作者提供的源码简单的分析一下,留个记录方便之后查看,免得之后重新翻源码。源码地址如下:GitHub源码地址
(源码里是用jupyter,我直接转换成py然后在pycharm里看了,这样看函数方便一些)
1、首先是压缩包解压后的文件,其中包括五个模块,入口在最上面的模块,其中data是我自行修改的,源码中数据集下载的root是“.”,我修改成./data这样更美观一点。
![](/assets/blank.gif)
2、 clustered_federated_learning.py
INPUT 1
示例中使用的是经典的EMNIST的byclass数据集,使用只用到了20000 idcs,前10000用作训练,后面用作测试,并且假设的client一共设计有10个,开始时用split_noiid函数打散数据集并且分成十份,所用的函数定义在data_utils中,其实简单来说就是用 np.random.dirichlet 函数使得数据集趋向于noiid分布在十份客户端中。
![](/assets/blank.gif)
INPUT 2
第二部分利用绘图将之前打散的数据绘图出来,证明其中的数据分布满足NoIID,因为没有开jupyter就不截图了,大家懂这个意思就行。
INPUT 3
接着作者做了一件事,将前五个client的数据全部旋转180度,经典的人为制造差异,使得后续的计算中将前五个client和后五个client成功分组,然后证明能够更好的效果。
![](/assets/blank.gif)
INPUT 4
作者初始化client和server,这部分函数先不说,后续会根据函数代码给大家展示。
初始化时带上了model,这部分很简单,定义在model模块,大家自己看看就行。
INPUT 5
接下来是重点部分,首先作者定义运行80轮,接着定义了eps_1 和 eps_2两个值,至于两个值作用,论文里说的很清楚了,不多赘述,后面也会用到。
![](/assets/blank.gif)
开始先做一个判断,第一轮时会初始化client,就是将server端的weight复制到client储存里,相当于初始化同步操作
接着随机选择client进行计算,但是因为本来client就很少,不可能再减少了,所以ftac=1.0,这个就是比例,比例为100%,相当于全选
接着需要每一个client计算weight更新,更新完之后要记得reset,也就是计算完后全部恢复上一次的server端给的weight,因为后续真正的更新需要由server去给。
更新和reset的函数如下,subtract函数是将计算后的weight和weight-old相减计算差值
全部算完就轮到server出场了,server计算会返回一个矩阵,矩阵里就是每个clinet两两之间的余弦值了
矩阵计算,中间省略了一个函数的跳转,source里储存的是每一个client的dw值
接着分割的步骤来了,这里就可以看出eps的作用了,对照论文一目了然,其中作者为了准确度,分割至少需要在20轮之后,较为稳定再去做分割
其中cluster的算法作者直接使用的是AgglomerativeClustering函数,作者现在也在学习各种分类算法,k-means、层次之类的
后面的部分就没什么好说的了,最后附一张图吧。
Clustered Federated Learning 论文源码阅读笔记相关推荐
- dgl源码阅读笔记(3)——DeepWalk
dgl源码阅读笔记(3)--DeepWalk 图神经网络开源库dgl阅读笔记 文章目录 dgl源码阅读笔记(3)--DeepWalk 图神经网络开源库dgl阅读笔记 @[TOC](文章目录) 前言 一 ...
- Transformers包tokenizer.encode()方法源码阅读笔记
Transformers包tokenizer.encode()方法源码阅读笔记_天才小呵呵的博客-CSDN博客_tokenizer.encode
- 源码阅读笔记 BiLSTM+CRF做NER任务 流程图
源码阅读笔记 BiLSTM+CRF做NER任务(二) 源码地址:https://github.com/ZhixiuYe/NER-pytorch 本篇正式进入源码的阅读,按照流程顺序,一一解剖. 一.流 ...
- 代码分析:NASM源码阅读笔记
NASM源码阅读笔记 NASM(Netwide Assembler)的使用文档和代码间的注释相当齐全,这给阅读源码 提供了很大的方便.按作者的说法,这是一个模块化的,可重用的x86汇编器, 而且能够被 ...
- CI框架源码阅读笔记4 引导文件CodeIgniter.php
到了这里,终于进入CI框架的核心了.既然是"引导"文件,那么就是对用户的请求.参数等做相应的导向,让用户请求和数据流按照正确的线路各就各位.例如,用户的请求url: http:// ...
- Yii源码阅读笔记 - 日志组件
2015-03-09 一 By youngsterxyf 使用 Yii框架为开发者提供两个静态方法进行日志记录: Yii::log($message, $level, $category); Yii: ...
- AQS源码阅读笔记(一)
AQS源码阅读笔记 先看下这个类张非常重要的一个静态内部类Node.如下: static final class Node {//表示当前节点以共享模式等待锁static final Node SHA ...
- 【Flink】Flink 源码阅读笔记(20)- Flink 基于 Mailbox 的线程模型
1.概述 转载:Flink 源码阅读笔记(20)- Flink 基于 Mailbox 的线程模型 相似文章:[Flink]Flink 基于 MailBox 实现的 StreamTask 线程模型 Fl ...
- 【Flink】Flink 源码阅读笔记(18)- Flink SQL 中的流和动态表
1.概述 转载:Flink 源码阅读笔记(18)- Flink SQL 中的流和动态表
最新文章
- GEB:南土所梁玉婷组-大陆尺度下稻田土壤微生物β多样性的纬度分布特征
- 算法导轮之B树的学习
- 高等数学下-赵立军-北京大学出版社-题解-练习8.3
- mysql gui 分区_一文彻底搞懂MySQL分区
- Python实现自动推本地github博客到远程仓库
- 堆排序时间复杂度_图解堆结构、堆排序及堆的应用
- Kafka一些参数配置
- Acoustica 7 Premium Edition for Mac(音频处理软件) v7.3.28
- http 请求 超时时间设置
- 硬盘分区变为RAW文件系统后的解决办法
- js 匿名函数_JS箭头函数三连问:为何用、怎么用、何时用
- 超码、候选码和主码有什么区别?
- 如何免费下载DJKK的音乐
- 写一个登录界面连接数据库,判断用户名和密码
- 今天安利几个App给你
- 乐学成语——数据库创建(导入、打开)
- 蓝牙信标有哪些附加功能?蓝牙信标的工业用途知多少?
- 纯css画梯形,纯CSS3实现的梯形立方体
- Soso(嗖嗖)移动 java 项目
- 【华三H3C设备命令最全大合集】
热门文章
- 全球及中国银行保险市场渠道模式分析与运营风险评估报告2022版
- openshift 页面-图形化基础介绍
- SSM整合,史上最详细的入门级代码,以后用的话直接往进套,复制即用
- 加拿大留学商科好还是计算机科学好,加拿大留学商科专业有哪些好大学
- 对城市流浪宠物监控物联网系统的大致了解
- 帮忙投票-2009年度全国儿童摄影展艺术展(第十期)江苏南京展区
- 计算机考研复试面试常问问题 操作系统篇
- unity web player full 完整版unitywebplayer播放器下载址
- MediaPlayer的生命周期和缓冲策略 (源码篇)
- 刘德华演唱会停止后报平安:身体稳定 已经出院