自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(47)
  • 资源 (1)
  • 收藏
  • 关注

原创 python字典遍历中 key in dict 与 key in dict.keys()的区别

同:for key in dict 与 for key in dict.keys() 都是对字典键的遍历异:python2 使用 for key in dict.keys() 涉及额外的函数调用(堆栈开销),而 for key in dict 可以在内部使用 set 对象,是对列表进行线性搜索。所以随着键数量的增加,for key in dict.keys() 的性能相较于 for key in dict 会越来越差python3 则没有这种性能差异,两者使用效果差不多。结论:尽量习惯使用 f

2022-04-18 10:54:35 2340

原创 pytorch中model.parameters()和model.state_dict()使用时的区别

联邦学习模拟实验中涉及模型参数的聚合和广播,需要提取模型参数。这个时候一般有两个选择,model.parameters() 和 model.state.dict()。表面上看这两者的区别只在于 model.parameters() 方法返回的是一个生成器generator,里面只有模型的参数,而没有对应的网络层名称;而model.state_dict() 返回的则是一个字典 {key:value},key 时网络层名称,value 则是该层的参数。但我实际做实验的时候发现,分别用这两种方法进行聚合的实验

2022-03-18 13:33:31 7936

原创 softmax与CrossEntropyLoss(),log_softmax与 NLLLoss()

我们在处理单标签多分类问题时,若考虑用softmax来对模型最后输出作计算以得到各标签的概率分布,那之后可以通过crossentropy做一个似然估计,求得误差但softmax求出来的概率分布中,每个标签的概率p∈(0,1),当有些标签的概率过小时就会导致下溢出(实数在计算机内用二进制表示,所以不是一个精确值,当数值过小的时候,被四舍五入为0,这就是下溢出。此时如果对这个数再做某些运算(例如除以它)就会出问题。)。考虑softmax和crossentropy这个组合方案,crossentropy的计算是

2021-11-01 13:49:31 627

原创 联邦持续学习——Federated Weighted Inter-client Transfer(FedWeIT)

联邦持续学习的目的联邦持续学习意在将联邦学习和持续学习相结合,以解决 “每个客户端从私有本地数据流中学习一系列任务,不同客户端之间也可以互相借鉴彼此已有的知识以增强自身的学习效果” 的场景,目前这方面的研究还很少。联邦持续学习的挑战和持续学习类似的,联邦持续学习也面临“灾难性遗忘”;此外,由于不同客户端训练的任务可能存在很大的差别,联邦持续学习训练过程中每个客户端还面临“来自其他客户端的干扰”;再者,由于每个客户端都希望能从其他客户端的相似任务中获得共识知识,“通信代价”也成为了一个不可忽视的问题。

2021-10-01 18:45:04 2935 3

原创 持续学习——Continual Learning With Additive Parameter Decomposition

持续学习的概念“持续学习”的概念其实非常好理解,正如我们先后学习高数和线代,我们希望在学习线代的时候仍能够记住之前学的高数内容,同时用高数的思想来帮助理解和学习线代,这就是一种持续学习的能力。那我们也希望神经网络可以跟人一样具备这种能力,对多个任务不断学习,而不是再为每个任务训练一个网络。这种能力概括起来就是以下两点:可塑性(学习新知识的能力):应用从之前任务学习到的经验,以更快更好地学习当前任务;稳定性(旧知识的记忆能力):学习当前任务时,不会忘记之前已经学会的任务。持续学习面对的挑战然鹅,

2021-09-30 23:17:20 2426 3

原创 联邦学习——一种基于分布和知识蒸馏的聚合策略

《FEDBE: Making Bayesian Model Ensemble Applicable to Federated Learning》是ICLR 2021的一篇文章。该文章主要提出了一种新的聚合策略,该策略在 multi-round FL 以及 Non-IID 下具有不错的表现。这里我主要总结这个策略的思路。构建模型分布:首先客户端将本地训练好的模型发送给服务端,服务端应用Dirichlet或 Bayesian构建模型的分布,具体构建方法可以看论文。模型采样:服务端对所构建的模型分布进行采样

2021-09-26 11:14:41 3469 1

原创 联邦学习——Base + Personalization Layers的另一种玩法

在典型的联邦学习中,不同设备之间的数据分布差异很大。为了缓解这种统计异质性的不利影响,《Federated learning with personalization layers》这篇文章给出了一个新的思路:将模型分为基础层和个性化层,提出了名为 FedPer 的架构。与联邦迁移学习(即首先对所有层进行全局训练,然后对所有或个别层进行局部数据再训练)不同,FedPer 先在全局数据上训练基础层,再在本地数据上训练个性化层,避免了联邦迁移学习需要重训练的问题。《Exploiting Shared Repr

2021-09-24 17:55:24 2783 1

原创 联邦学习如何训练用户识别模型?

“用户识别模型”也就是训练一个通过语音,或人脸,或指纹等个人信息进行身份识别的模型,也是一个选择“接受”或”拒绝”的二元决策问题。以基于embedding的分类为例,一个样本只有其embedding与reference embedding足够接近,才能通过模型验证(被模型接受),换句话说就是“身份验证成功”。联邦学习训练“用户识别模型”存在两个挑战:每个参与方只有一个用户的信息作为训练数据,也就是说所有数据都属于同一个类标签(用户自身)采用embeddind vector表征用户身份信息,由于涉及用

2021-09-23 00:06:25 1047 1

原创 Batch Normalization在联邦学习中的应用

回想一下联邦学习(FL)中的FedAvg,这个算法是将每个参与方的模型的所有参数进行加权平均聚合,包括Batch Normalization(BN)的参数。再回顾一下BN。式中µ和σ2σ^2σ2为BN统计量,是通过每个channel的空间和批次维度计算而得的running mean和running variances。γ和β为实现"变换重构"的超参数。ε用于预防分母为零。我们知道FL的一个重要意义就在于保护参与方的数据隐私,而BN层的统计参数µ和σ2σ^2σ2实际上在一定程度上隐含着本地数据的统计信息

2021-09-22 20:12:44 1241 3

原创 用plt画图咋y轴不按大小排列

跑完实验想把保存的loss通过plt画出来,结果画出来这么一玩意儿,吓我一跳,合着我的模型是在增加噪声。仔细一看才发现,因为保存下来的loss是文本,所以得转为float类型或者int类型才能正常显示,加个强制转换就好啦。...

2021-09-18 19:34:53 947

原创 CUDA out of memory(然鹅明明还有空间)

模型跑完想再跑一遍的时候居然给我报“CUDA out of memory”,很明显,我的显卡虽然菜,但起码还是可以跑的,毕竟刚跑完,那就可能是python在运行完以后没有释放资源,导致GPU的内存满了。如果是这样的话,那解决的方法就很简单了,直接把进程杀死就行。首先在C:\Program Files\NVIDIA Corporation\NVSMI位置打开命令行,然后输入nvidia-smi(也可以用nvidia-smi.exe -l 1,每秒更新CUDA使用情况),显示当前gpu的使用情况如下:显

2021-09-16 15:29:32 12128

原创 FedBN总结

《FEDBN: FEDERATED LEARNING ON NON-IID FEATURES VIA LOCAL BATCH NORMALIZATION》ICLR 2021。文章通过在局部模型中加入批量归一化层(BN)解决联邦学习数据异构性中feature shift这种情况(之前很多文章都是研究label shift或client shift),文章将这种方法名为FedBN。什么是feature shifty为标签,x为特征,文章将feature shift定义为以下情况:1)covariate s

2021-09-04 10:32:15 4808

原创 FedFomo论文阅读笔记

《PERSONALIZED FEDERATED LEARNING WITH FIRST ORDER MODEL OPTIMIZATION》是ICRL-2021的一篇个性化联邦学习文章。该文章通过赋予客户一个新的角色,并提出一种新的权重策略,构造了一种在隐私和性能之间进行权衡的新的联邦学习框架。创新点:传统的联邦学习目标是训练一个全局模型,个性化联邦学习则认为单一的全局模型难以收敛,且并非在每个客户上都有很好的表现。这篇文章也是基于个性化的想法,同时赋予客户一个新的角色。提出服务端保存每个客户的模型,

2021-08-17 17:43:43 2389

原创 联邦学习——基于聚类抽样进行客户选择

《Clustered Sampling: Low-Variance and Improved Representativity for Clients Selection in Federated Learning》针对目前联邦学习中的客户选择策略存在的偏倚问题、server-client通信和训练稳定性问题,这篇文章提出采用聚类抽样的方法进行客户选择,并证明了聚类抽样能提高用户的代表性,并减少不同客户聚合时的权重差异。本文提出了基于样本数量和模型相似性的两种聚合抽样方法,并通过实验证明,采用聚类抽样的方法

2021-08-03 15:03:16 5796 3

原创 python笔记——文件操作与os模块

编码格式之前有写过一篇字符编码的笔记:python笔记——字符编码。这次主要是总结编码与python文件操作的关系。1、中文文件改为gbk编码可以减少文件对磁盘的占用空间2、UTF-8可以看作是Unicode的一个实现,在python中的区别主要是:python的解释器使用的是Unicode(内存)模块(.py文件)在磁盘上使用的是UTF-8存储(外存)3、当然可以在模块最上方修改它的编码格式,例如改为gbk。(改为gbk后发现编码格式变为ANSI,别担心,它跟GBK这些中文编码是一样的)

2021-07-31 00:21:04 279

原创 python笔记——模块与包

模块1、定义:在python中一个扩展名为.py的文件就是一个模块2、结构:一个python程序有多个模块(.py文件),一个模块可以包含多个函数、类和语句。3、使用模块的好处方便其他程序和脚本的导入和使用(不用在意内部细节)。每个模块可由不同人员开发,非常便于团队开发,提高效率。避免函数名和变量名的冲突。提高代码的可维护性(哪个模块有问题就改哪个,其他无需改变)。提高代码的可重用性(多次调用)。自定义模块1、创建模块新建一个.py文件,名称尽量不要于python自带的标准模块名称

2021-07-30 22:19:15 273

原创 python笔记——类的赋值、浅拷贝和深拷贝

变量的赋值操作只是形成两个变量,实际上这两个变量指向同一个对象。class CPU(): passclass Disk(): passclass Computer(): def __init__(self,cpu,disk): self.cpu = cpu self.disk = disk#变量的赋值cpu1 = CPU()cpu2 = cpu1#可以看到,变量执行赋值操作后,两个变量指向同一个对象。print(cpu1) #<__main__.CPU obje

2021-07-29 00:07:03 280

原创 python笔记——面向对象的细节

众所周知,面向对象的三大特征就是封装、继承和多态,这是面向对象的语言都具备的特征,只是不同语言在实现上会有所不同。那么python是怎么实现这三个特征的呢?咱这就来唠唠。封装封装是为了提高程序的安全性将数据(属性)和行为(方法)包装到类对象中。在方法内部对属性进行操作,在类对象的外部调用方法。从而在调用时无需关心方法内部的具体实现细节,从而隔离了复杂度。在Python中没有专门的修饰符用于属性的私有,如果某一属性不希望在类对象外部被访问,可以在定义时往属性名前边加俩下划线。私有属性一般只能通过类

2021-07-28 20:09:55 115

原创 python笔记——类与对象的那些事儿

python一切皆对象python中除了少数几个语句,其余全都是对象!创建一个类,这个类便称为类对象,也占内存空间,也有它的值。class Student: passprint(id(Student)) #2926222013040print(type(Student)) #<class 'type'>print(Student) #<class 'main_.student'>类的组成类属性:类中方法外定义的变量称为类属性,被该类的所有对象所共享

2021-07-28 12:25:34 112

原创 python笔记——异常处理机制

try-except结构except可以有一个或多个。捕获异常的顺序按照先子类后父类,为了避免遗漏可能会出现的异常,可以在最后增加BaseException#两个整数相除try: n1 = int(input('请输入第一个整数')) n2 = int(input('请输入第二个整数')) print('结果为:',n1/n2)except ZeroDivisionError: print('除数不能为0')except ValueError: print('不能将字符串转换为数字')

2021-07-28 01:28:13 117

原创 python笔记——函数与变量作用域

函数的参数传递函数调用过程中,若进行了参数的传递(调用函数时的传入的参数是实参,函数体内的是形参)如果参数为不可变对象,在函数体的修改不会影响实参的值,如整数、字符串、元组等如果参数是可变对象,在函数体的修改会影响实参的值,如列表、字典、集合等函数的返回值若函数无返回值,则return可省略若函数的返回值只有一个,则返回的结果该是什么就是什么,比如return一个整数,那返回的就是一个整数。若函数的返回值有多个,则返回的结果为元组类型(也就是把多个返回值封装到了一个元组里)函数的参

2021-07-26 21:05:52 156

原创 联邦学习——基于知识蒸馏的多源域适应

《KD3A: Unsupervised Multi-Source Decentralized Domain Adaptation viaKnowledge Distillation》是一篇被ICML 2021接收的论文,论文作者来自浙江大学CAD&CG国家重点实验室。这篇文章提出一个对来自多个源域的模型进行知识蒸馏来构建可迁移的共识知识,并可应用于联邦学习的无监督多源域适应方法。简介传统的无监督多源域适应UMDA(Unsupervised Multi-source Domain Adaptat

2021-07-25 19:38:32 2777 1

原创 python笔记——集合

集合python的内置数据结构之一,与列表、字典一样都属于可变序列集合是没有value的字典,相当于计算key的hash值并存储key,其他则和字典一样,比如key不能重复,key必须是不可变对象,key是无序的。也就是说集合中的元素是不可重复的、是不可变对象、是无序的。集合的创建方式直接用花括号{ }s = {'python', 'hello', 90, 90, 80} #{'python', 'hello', 90, 80}使用内置函数set( )可以将列表、元组、字符串序列

2021-07-22 16:38:48 183

原创 python笔记——元组

元组元组是python的内置数据结构之一,与字符串一样是一个不可变序列不可变序列(字符串、元组、整数等):没有增删改的操作可变序列(列表、字典等):可以对序列进行增删改的操作,且序列地址不发生改变。元组的创建直接用小括号( ),这里的小括号也可以省略。#t1和t2创建的元组相同t1 = ('python', 'hello', '98')t2 = 'python', 'hello', 98只包含一个元素的元组需要使用逗号和小括号,缺一不可!t = ('python', )

2021-07-22 15:14:35 175

原创 python笔记——字典

字典python内置的数据结构之一,与列表一样是一个可变序列以键值对的方式存储数据,字典是一个无序的序列字典的创建两种常用方式使用花括号{}scores = {'张三': 100, '李四': 98}使用内置函数dict()scores = dict(name = 'Leo', age = 23)创建空字典d = {}字典元素的获取方法举例[key]scores[‘张三’]get(key)scores.get(‘张三’)[]

2021-07-22 12:24:42 156

原创 python笔记——列表

列表变量可以存储一个元素,而列表是一个“容器”,可以存储N个元素的引用,并且这N个元素可以是不同的数据类型列表示意图:列表的两种创建方式列表有两种创建方式,①使用中括号[],②使用内置函数list()使用中括号[],元素之间使用英文逗号进行分隔lst1 = ['hello', 'python', 98]使用内置函数list()lst2 = list(['hello', 'python', 98])列表的特点列表元素按顺序有序排序索引映射唯一一个数据列表可以存储重复

2021-07-22 11:01:57 717

原创 python笔记——else可与for/while搭配使用

python中的else可以与for或while搭配使用,前提是循环过程中没有碰到breakeg:输入密码for i in range(3): pwd = input('请输入密码:') if pwd = '8888': print('密码正确') break else: print('密码错误')else: print('连续三次密码错误,账号已冻结')a = 0while a<3: pwd = input('请输入密码:') if pwd = '8888':

2021-07-21 19:59:23 736

原创 python笔记——range()与for-in循环

range()函数作用:生成一个左闭右开的整数序列。创建range对象的三种方式:range(stop)创建一个[0,stop)之间的整数序列,步长为1range(start,stop)创建一个[start,stop)之间的整数序列,步长为1range(start,stop,step)创建一个[start,stop)之间的整数序列,步长为step返回值是一个迭代器对象,可以用list()查看完整序列。a = range(1,5)print(a)

2021-07-21 19:32:51 653

原创 python笔记——运算符

算术运算符python的算数运算有一个需要注意的地方就是一正一负两个数的整除与取余一正一负的整除:向下取整print(9//-4) #-3print(-9//4) #-3 一正一负的取余:余数=被除数-除数*商(注意这个商是向下取整的商)#9-(-4)*(-3)=-3print(9%-4) #-3#-9-4*(-3)=3print(-9%4) #3赋值运算符系列解包赋值其实是很有用的,比如要交换两个变量的值,c语言需要创建一个新的变量来作为中介,python则

2021-07-21 17:21:22 123

原创 python笔记——常见数据类型及注意点

整数类型int十进制 → 默认的进制二进制 → 以0b开头(数字0和小写字母b)八进制 → 以0o开头(数字0和小写字母o)十六进制 → 0x开头(数字0和小写字母x)浮点类型浮点数由整数部分和小数部分构成,涉及小数部分会有一个问题,因为计算机使用二进制表示,那么在表示小数的时候就会有点误差,导致浮点数存储不精确如:print(1.1+2.2) #3.30000000003print(1.1+2.1) #3.2可以看到1.1+2.2的结果有一个极小误差,这个问题可以通过导入模块d

2021-07-20 13:20:41 458

原创 python笔记——变量的使用及回收

python中的变量由“标识”、“类型”、“值”三部分构成标识:表示对象所存储的内存地址,使用内置函数id(obj)来获取类型:表示的是对象的数据类型,使用内置函数type(obj)来获取值:表示对象所存储的具体数据,使用print(obj)可以将值进行打印输出变量的内存分析图:变量name赋值后会指向一个内存空间再赋值则会指向新的内存空间,原来的空间称为内存垃圾,等待GC回收,python的垃圾回收机制可以参考这篇文章Python垃圾回收机制详解...

2021-07-19 17:43:25 395

原创 python笔记——标识符和保留字

保留字通过下面这段代码就可以打印python的保留字,保留字不能用于文件、变量等的命名。import keywordprint(keyword.kwlist)标识符给变量、函数、类、模块和其它对象的命名就叫做“标识符”规则:只能用字母、数字、下划线不能以数字开头不能用保留字严格区分大小写...

2021-07-19 16:57:33 125 1

原创 python笔记——字符编码

计算机只能识别0或1,以二进制的方式进行运算。但对于人来讲二进制的表示方式并不好记所以便把二进制代表的意思编程一个表格,这个表格叫ASCII表,ASCII表用一个字节表示一个字符,共可以表示256个字符,且前128个字符固定,后128个供各国家自己定义。但对于汉字来讲,这明显是不够用的。所以在1980推出了GB2312,一个可以表示简体中文的字符集,可以表示7445个字符,但明显还是不够用。90年代又推出了GBK,可以表示简体和繁体中文。但对于地大物博的中国,这依旧不够用,因为还有一些少数民族的..

2021-07-19 16:48:06 65

原创 联邦学习——用data-free知识蒸馏处理Non-IID

《Data-Free Knowledge Distillation for Heterogeneous Federated Learning》最近出现了利用知识蒸馏来解决FL中的用户异构性问题的想法,具体是通过使用来自异构用户的聚合知识来优化全局模型,而不是直接聚合用户的模型参数。然而,这种方法依赖于proxy dataset,如果没有这proxy dataset,该方法便是不切实际的。此外,集成知识没有被充分利用来指导局部模型的训练,这可能反过来影响聚集模型的性能。基于上述挑战,这篇文章提出了一种da

2021-07-18 14:37:08 5053 12

原创 联邦元学习笔记

《Personalized Federated Learning: A Meta-Learning Approach》这篇文章利用元学习来实现联邦个性化学习,将用户看作元学习中的多个任务。和元学习一样,其目标是找到一个初始化模型,当前用户或新用户只需对他们的本地数据执行一步或几步梯度下降,便可将模型适应他们的本地数据集。这样当有一个新用户进来时,就可以通过一步或几步梯度下降快速获得一个高效的个性化模型。文章主要内容有三点:1、将元学习和FL进行结合,具体以FedAvg为框架,以MAML为内容,提出Per

2021-07-14 11:48:22 2007 1

原创 MAML笔记

最近想康康联邦元学习,涉及MAML,直接看论文有点懵,所以先补一下元学习和MAML的内容。《Model-Agnostic Meta-Learning for Fast Adaptation of Deep Networks》提出一种 meta-learning 算法,即MAML,使模型能自动进行参数的初始化,省去许多计算步骤。该算法是模型无关的,适用于任何利用梯度下降的方法来训练的模型,并且适用于多种任务,如分类,回归,强化学习。meta-learning 的目标是通过多个任务训练一个元模型,该模型可以

2021-07-13 11:15:48 613

原创 联邦学习——Ditto:同时提升公平性和鲁棒性

《Ditto: Fair and Robust Federated Learning Through Personalization》这篇文章的作者之一Virginia Smith于2017年提出了Federated Multi-Task Learning用于实现个性化联邦学习。这篇文章提出的Ditto算法也是基于联邦多任务学习的个性化方法,目的在于同时提升联邦学习中的公平性和鲁棒性。FL公平性和鲁棒性的定义公平性:不同设备的本地模型具有相同性能鲁棒性:具体指拜占庭鲁棒性,即恶意节点可以给服务器发送任

2021-07-07 21:24:56 5036 2

原创 L2GD论文阅读笔记

摘要《Federated Learning of a Mixture of Global and Local Models》这篇论文的目的是在Local和Global之间寻找一个trade off,对全局模型和局部模型进行混合,并提出适用于这一想法的几种新的梯度下降算法,如L2GD,该算法还能改进通信复杂度。本文的两项动机1、全局模型在客户端的实用性问题。2、传统的LGD在理论上,并不能改善的通信复杂度。主要贡献一、能够混合全局模型和局部模型的新目标函数。通过加入一个乘以λ的惩罚项ψ(λ&gt

2021-07-07 14:07:18 1347 2

原创 简单理解凸优化中μ-strongly convex和L-smooth

不考虑具体原理,单纯考虑作用的话,可以把μ-strongly convex和L-smooth看作是一对CP,这对CP可以将目标函数强行变成一个二次函数的样子,并且限制了梯度的最大最小变化速度,使得梯度下降变得可控(L-smooth定义了二次函数的上界和梯度的最大变化速度,μ-strongly convexh定义了二次函数的上下界和梯度的最小变化速度)。目标函数有了这样的性质,便可以很方便地对其进行收敛性分析,并证明该算法的收敛性。所以总的来说,μ-strongly convex+L-smooth,有利于

2021-07-05 12:25:14 4645 3

原创 FedProx论文阅读笔记

《FEDERATED OPTIMIZATION IN HETEROGENEOUS NETWORKS》这篇文章提出了一个基于FedAvg的优化框架Fedprox,主要在于解决FedAvg未曾处理的联邦学习中的异构性问题,并提供了更强的鲁棒性。FedAvg在FedAvg中,每个设备在模型训练过程中具有相同的学习率和迭代次数。在每一轮更新中,被选中参与本轮训练的设备K在本地运行E轮SGD,每个设备将更新结果返回给服务器,服务器对得到的模型更新进行平均从而获得全局更新,并完成本轮训练。伪代码如Algorithm

2021-07-04 00:04:39 6999 5

计算机网络谢希仁第七版课后题答案完整版.docx

21年广工计算机考研专业课新增计算机网络,且参考书为谢希仁著的第七版。我在把课后题做了四五遍的基础上总结了这篇完整的课后题答案,其中还包括一些拓展理解笔记(已上岸)。

2021-08-17

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除