本篇文章的阅读论文是《Clustered Federated Learning: Model-Agnostic Distributed Multitask Optimization Under Privacy Constraints》,主要是对论文的作者提供的源码简单的分析一下,留个记录方便之后查看,免得之后重新翻源码。源码地址如下:GitHub源码地址

(源码里是用jupyter,我直接转换成py然后在pycharm里看了,这样看函数方便一些)

1、首先是压缩包解压后的文件,其中包括五个模块,入口在最上面的模块,其中data是我自行修改的,源码中数据集下载的root是“.”,我修改成./data这样更美观一点。

工程结构图

2、 clustered_federated_learning.py

INPUT 1

示例中使用的是经典的EMNIST的byclass数据集,使用只用到了20000 idcs,前10000用作训练,后面用作测试,并且假设的client一共设计有10个,开始时用split_noiid函数打散数据集并且分成十份,所用的函数定义在data_utils中,其实简单来说就是用 np.random.dirichlet 函数使得数据集趋向于noiid分布在十份客户端中。

INPUT1 部分代码

INPUT 2

第二部分利用绘图将之前打散的数据绘图出来,证明其中的数据分布满足NoIID,因为没有开jupyter就不截图了,大家懂这个意思就行。

INPUT 3

接着作者做了一件事,将前五个client的数据全部旋转180度,经典的人为制造差异,使得后续的计算中将前五个client和后五个client成功分组,然后证明能够更好的效果。

INPUT 3 旋转一部分clinet的图像

INPUT 4

作者初始化client和server,这部分函数先不说,后续会根据函数代码给大家展示。

初始化时带上了model,这部分很简单,定义在model模块,大家自己看看就行。

INPUT 5

接下来是重点部分,首先作者定义运行80轮,接着定义了eps_1 和 eps_2两个值,至于两个值作用,论文里说的很清楚了,不多赘述,后面也会用到。

参数初始化 for开头循环80轮

开始先做一个判断,第一轮时会初始化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 论文源码阅读笔记相关推荐

  1. dgl源码阅读笔记(3)——DeepWalk

    dgl源码阅读笔记(3)--DeepWalk 图神经网络开源库dgl阅读笔记 文章目录 dgl源码阅读笔记(3)--DeepWalk 图神经网络开源库dgl阅读笔记 @[TOC](文章目录) 前言 一 ...

  2. Transformers包tokenizer.encode()方法源码阅读笔记

    Transformers包tokenizer.encode()方法源码阅读笔记_天才小呵呵的博客-CSDN博客_tokenizer.encode

  3. 源码阅读笔记 BiLSTM+CRF做NER任务 流程图

    源码阅读笔记 BiLSTM+CRF做NER任务(二) 源码地址:https://github.com/ZhixiuYe/NER-pytorch 本篇正式进入源码的阅读,按照流程顺序,一一解剖. 一.流 ...

  4. 代码分析:NASM源码阅读笔记

    NASM源码阅读笔记 NASM(Netwide Assembler)的使用文档和代码间的注释相当齐全,这给阅读源码 提供了很大的方便.按作者的说法,这是一个模块化的,可重用的x86汇编器, 而且能够被 ...

  5. CI框架源码阅读笔记4 引导文件CodeIgniter.php

    到了这里,终于进入CI框架的核心了.既然是"引导"文件,那么就是对用户的请求.参数等做相应的导向,让用户请求和数据流按照正确的线路各就各位.例如,用户的请求url: http:// ...

  6. Yii源码阅读笔记 - 日志组件

    2015-03-09 一 By youngsterxyf 使用 Yii框架为开发者提供两个静态方法进行日志记录: Yii::log($message, $level, $category); Yii: ...

  7. AQS源码阅读笔记(一)

    AQS源码阅读笔记 先看下这个类张非常重要的一个静态内部类Node.如下: static final class Node {//表示当前节点以共享模式等待锁static final Node SHA ...

  8. 【Flink】Flink 源码阅读笔记(20)- Flink 基于 Mailbox 的线程模型

    1.概述 转载:Flink 源码阅读笔记(20)- Flink 基于 Mailbox 的线程模型 相似文章:[Flink]Flink 基于 MailBox 实现的 StreamTask 线程模型 Fl ...

  9. 【Flink】Flink 源码阅读笔记(18)- Flink SQL 中的流和动态表

    1.概述 转载:Flink 源码阅读笔记(18)- Flink SQL 中的流和动态表

最新文章

  1. GEB:南土所梁玉婷组-大陆尺度下稻田土壤微生物β多样性的纬度分布特征
  2. 算法导轮之B树的学习
  3. 高等数学下-赵立军-北京大学出版社-题解-练习8.3
  4. mysql gui 分区_一文彻底搞懂MySQL分区
  5. Python实现自动推本地github博客到远程仓库
  6. 堆排序时间复杂度_图解堆结构、堆排序及堆的应用
  7. Kafka一些参数配置
  8. Acoustica 7 Premium Edition for Mac(音频处理软件) v7.3.28
  9. http 请求 超时时间设置
  10. 硬盘分区变为RAW文件系统后的解决办法
  11. js 匿名函数_JS箭头函数三连问:为何用、怎么用、何时用
  12. 超码、候选码和主码有什么区别?
  13. 如何免费下载DJKK的音乐
  14. 写一个登录界面连接数据库,判断用户名和密码
  15. 今天安利几个App给你
  16. 乐学成语——数据库创建(导入、打开)
  17. 蓝牙信标有哪些附加功能?蓝牙信标的工业用途知多少?
  18. 纯css画梯形,纯CSS3实现的梯形立方体
  19. Soso(嗖嗖)移动 java 项目
  20. 【华三H3C设备命令最全大合集】

热门文章

  1. 全球及中国银行保险市场渠道模式分析与运营风险评估报告2022版
  2. openshift 页面-图形化基础介绍
  3. SSM整合,史上最详细的入门级代码,以后用的话直接往进套,复制即用
  4. 加拿大留学商科好还是计算机科学好,加拿大留学商科专业有哪些好大学
  5. 对城市流浪宠物监控物联网系统的大致了解
  6. 帮忙投票-2009年度全国儿童摄影展艺术展(第十期)江苏南京展区
  7. 计算机考研复试面试常问问题 操作系统篇
  8. unity web player full 完整版unitywebplayer播放器下载址
  9. MediaPlayer的生命周期和缓冲策略 (源码篇)
  10. 刘德华演唱会停止后报平安:身体稳定 已经出院