首页
关于
Search
1
图神经网络
109 阅读
2
java期末速成
46 阅读
3
CLIP
42 阅读
4
Attention2Transformer
36 阅读
5
MySQL
32 阅读
默认分类
AI
课内
技能
Search
标签搜索
AI
CS
Tools
paper
DeepLearning
python
DATA
GNN
Transformer
hadoop
晨旭不想写程序
累计撰写
24
篇文章
累计收到
23
条评论
首页
栏目
默认分类
AI
课内
技能
页面
关于
搜索到
24
篇与
的结果
2024-06-02
数据解析
数据解析在最近学习中我们学习了两种解析方法,分别是正则表达式的re解析与BeautifulSoup解析器的使用一、正则表达式正则表达式是用来避免重复工作,处理有规律信息的一个有力工具import re text = "Hi, I am Shirley Hilton. I am his wife." m = re.findall(r"hi", text) if m: print (m) else: print ('not match')这是一个小实验,通过它来看,我们不难看出这是在通过某种方法寻找"Hi, I am Shirley Hilton. I am his wife."这段话中的"hi"通过这个我们发现会有两个结果,都是hi,分别来自于Shirly与his俩单词,由此我们看出,正则表达式是严格的,区分大小写的,Hi并不满足要求。当然,不仅仅有这样的查找,也可以仅仅找部分的,比如只匹配“Hi”,在这段话中只想要计数一次,那么我们可以采用"\bHi\b"的查找对象,这样就能仅仅匹配单独的Hi啦。“\b”在正则表达式中表示单词的开头或结尾,空格、标点、换行都算是单词的分割。而“\b”自身又不会匹配任何字符,它代表的只是一个位置。所以单词前后的空格标点之类不会出现在结果里。然后[]符号的作用也很大,它的作用是表示满足括号中任一字符,例如我们想要Hi也想要hi,就可以[Hh]ir接下来继续解释这个小试验中的内容,在语句传参时的r的含义,为什么要加r?<br/>r,是raw的意思,它表示对字符串不进行转义。例如:>>> print ("\bhi") hi >>> print (r"\bhi") \bhirere是python里的正则表达式模块。findall是其中一个方法,用来按照提供的正则表达式,去匹配文本中的所有符合条件的字符串。返回结果是一个包含所有匹配的list。特殊字符这里介绍.除换行符以外的任意字符\S不是空白符的任意字符*表示前面的字符可以重复任意多次(包括0次)+表示前面的字符可以重复任意多次(不包括0次){}表示指定长度[][]内任意字符\w匹配字母或数字或下划线或汉字 \d匹配数字\s匹配空白符^ 匹配字符串的开始$匹配字符串的结束?重复零次或一次(懒惰匹配){n,}重复n次或更多次{n,m}重复n到m次很容易猜想到,如\s\S这样大小写的区分就是正反的区别,由此推出各个对应的相反,此外,[^]内通过加^就代表除此符号外任意字符.*贪婪匹配/*?懒惰匹配二、BeautifulSoup解析器[1]简介Beautiful Soup是Python的一个库,能够从网页抓取数据提供了一些函数用来处理数据,用很少的代码就能够写出来一个完整的程序。[2]特点Beautiful Soup能够自动的将文档转换为utf-8编码格式,能够更为方便的进行使用使用[1]创建对象要想创建一个Beautiful Soup对象,首先要导入库bs4,lxml,requests。这里使用一个实例html = """ <html><head><title>The Dormouse's story</title></head> <body> <p class="title" name="dromouse"><b>The Dormouse's story</b></p> <p class="story">Once upon a time there were three little sisters; and their names were <a href="http://example.com/elsie" class="sister" id="link1"><!-- Elsie --></a>, <a href="http://example.com/lacie" class="sister" id="link2">Lacie</a> and <a href="http://example.com/tillie" class="sister" id="link3">Tillie</a>; and they lived at the bottom of a well.</p> <p class="story">...</p> """ soup = BeautifulSoup(html,'lxml') #创建 beautifulsoup 对象同时也可以使用HTML文件直接创建对象soup1 = BeautifulSoup(open('index.html')) Beautiful Soup将复杂HTML文档转换成一个复杂的树形结构,每个节点都是Python对象,所有对象可以归纳为4种:TagNavigableStringBeautifulSoupComment1>TagTag就是 HTML 中的一个个标签通过这种方法就可以直接访问标签print (soup.title) print (soup.head) print (soup.a) print (soup.p) print (type(soup.a))Tag有两个重要的属性,name与attrs并且可以对这些属性和内容进行修改2>NavigableString得到了标签的内容用 .string 即可获取标签内部的文字例如print(soup.a.string)3>BeautifulSoupBeautifulSoup 对象表示的是一个文档的全部内容.大部分时候,可以把它当作 Tag 对象,是一个特殊的 Tag,我们可以分别获取它的类型,名称:4>Comment[2]遍历文档树tag 的 .contents 属性可以将tag的子节点以列表的方式输出.children属性生成的是一个列表生成器对象,可以通过遍历获得其中的内容.descendants 属性可以对所有tag的子孙节点进行递归循环,和 children类似,要获取其中的内容,我们需要对其进行遍历还有许多关联选择方法[3]CSS选择器CSS的使用只需要调用select方法结合CSS选择器语法就可以实现元素定位格式:soup.select()1>id选择器每段节点都有专属的id,通过id就可以匹配相应的节点,使用#加id就可以实现定位2>类选择器类选择器用.来定位元素例如The Dormouse's story中的title就是类名3>标签选择器直接使用标签来定位即可例如p在定位时可以多种定位方法混合使用,达到更为理想的效果。[4]CSS高级用法1>嵌套选择因为其仍旧是一个tag对象,所以可以使用嵌套选择2>属性获取使用attrs属性3>文本获取使用string与strings获取文本信息[5]方法选择器1>find_all()方法soup传入整个HTML文档然后进行全文搜索find_all(name,attrs,recursive,text,**kwargs)name参数就是查找名字为name的节点,返回tag对象,这个传入的参数可以是字符串,可以是列表,正则,还可以是True(以此为参数可以获取所有的标签)attrs参数是查询含有接受的属性值的标签,参数形式为字典类型例如{id:'link1'}kwargs参数是接收常用的属性参数的,如id和class,参数形式是变量赋值的形式,例如(id='link1')<br/>class 是关键字,使用时应该加下划线即class_=……text参数是通过查询含有接受的文本的标签来查找的,参数形式是字符串limit参数是用于限制返回结果的数量的参数,参数形式是整数,顾名思义recursive参数是决定是否获取子孙节点的参数,参数形式是布尔值,默认是True2>find方法返回值是第一个符合条件的元素,除limit参数不存在外,其余参数都与find_all方法一致
2024年06月02日
25 阅读
0 评论
0 点赞
2024-06-02
AutoML
autoML学习使用工具auto_ml它主要将机器学习中所有耗时过程自动化,如数据预处理、最佳算法选择、超参数调整等,这样可节约大量时间在建立机器学习模型过程中。进行自动机器学习使用的库为pycaretpycaret——》开源机器学习库不好用从数据准备到模型部署 一行代码实现可以帮助执行端到端机器学习试验 无论是计算缺失值 编码分类数据 实施特征工程 超参数调整还是构建集成模型 都非常方便使用前新建虚拟环境:scikit-learn==0.23.2pycaret跟auto-ts有冲突根据要解决的问题类型,首先需要导入模块。在 PyCaret 的第一个版本中,有 6 个不同的模块可用 ---> 回归、分类、聚类、自然语言处理 (NLP)、异常检测和关联挖掘规则。我们这次要预测新增用户,所以是一个分类问题,我们引入分类模块# import the classification module from pycaret import classification # setup the environment classification_setup = classification.setup( data= data_classification, target='Personal Loan')设置更多自定义参数data_amend = exp_mclf101 = setup( data= data_classification, target='Personal Loan', train_size = 0.80, ignore_features = ["session_id",...], numeric_features =["Age",...], combine_rare_levels= False, rare_level_threshold=0.1, categorical_imputation = 'mode', imputation_type ='simple', feature_interaction = True, feature_ratio= True, interaction_threshold=0.01, session_id=123, fold_shuffle=True, use_gpu=True, fix_imbalance=True, remove_outliers=False,normalize = True, transformation = False, transformation_method='quantile', feature_selection= True, feature_selection_threshold = 0.8, feature_selection_method='boruta', remove_multicollinearity = True, multicollinearity_threshold=0.8 normalize_method = 'robust')在我们使用过程中只需要进行调用函数,函数值接受一个参数,也就是模型缩写这个表格包含了模型缩写字符串最后,我们将对陌生数据进行预测。为此,我们只需要传递将用于预测的数据集的模型。注意的是,确保它与之前设置环境时提供的格式相同。PyCaret 构建了所有步骤的管道,并将预测数据传递到管道中并输出结果。通过拜读群内大佬的数据处理过程 得到以下技巧分组聚合 将x1到x8的数据进行分组聚合 并计算每个分组对于target的均值猜想 有些特征数值比较大 是否使用正则化进行时间序列上的处理 将其转化成月 日 小时 分钟 以及是否为周末 一年中的第几周时间特征实际上并不好用依然使用决策树进行训练这样的训练方法使得分数进行了一定的上升,但依旧存在召回率低的问题
2024年06月02日
16 阅读
1 评论
0 点赞
2024-06-02
Attention2Transformer
注意力机制什么是注意力首先,心理学上,作为动物,想要在复杂环境下关注到需要关注的事物,机制是根据随意线索和不随意线索选择注意点随意与不随意实际上是遂意与不遂意,也就是是否受控例如这里的在环境中看到红色杯子,是因为杯子颜色鲜艳,会让人第一眼看到,这是不需要遂意的,而想读书带着个人意愿,是遂意的在搜索注意力机制像之前学习过的卷积 全连接 池化层 都是只考虑不随意线索,更倾向于关注有特点的事物注意力机制则显示的考虑随意线索随意线索被称之为查询(query) ——》要求,想法每个输入是一个值(value)和不随意线索(key)的对 ——》 环境,也就是存放一堆事物的场景通过注意力池化层来有偏向性的选择选择某些输入 ——》 根据想法,根据在环境中为事物的不同价值选择观察事物查询,键和值在此之前提出QKV的概念所谓Q即为query,被称为查询,即自主性提示,给定任何查询,注意力机制通过注意力汇聚将选择引导至感官输入,这些感官输入被称为V,即value,每个值都与一个键K,即key匹配,可以想象为非自主性提示。非参注意力汇聚$$ f(x)=\sum_{i=1}^{n}{\frac{K(x-x_{i})}{\sum_{i=1}^{n}{K(x-x_{j})}}}y_{i} $$其中$K()$的作用就是衡量$X$与$X_i$之间关系的一个函数$X$就是所谓的Q,是自主性提示而$X_i$是所谓的K,与V一一对应,是非自主性提示而他们的差值最小二乘,衡量他们的关系,此时二者差距越小,越接近,则此$y_i$所对应的权重就越大,即注意力分配越多,由此就得到了对应的汇聚函数$$ K(u)=\frac{1}{\sqrt{2\pi}}\,\mathrm{Exp}(-\frac{u^{2}}{2}) $$$$ \begin{array}{c}{{f(x)=\sum_{i=1}^{n}\frac{\exp\left(-\frac{1}{2}(x-x_{i})^{2}\right)}{\sum_{j=1}^{n}\exp\left(-\frac{1}{2}(x-x_{j})^{2}\right)}y_{i}}}\\ {{\displaystyle=\sum_{i=1}^{n}\mathrm{softmax}\left(-\frac{1}{2}(x-x_{i})^{2}\right)y_{i}}}\end{array} $$这里实际上就是做了一个softmax操作有参注意力汇聚在此基础上引入可以学习的$w$ ,就实现了有参数的注意力汇聚f(x)= $ \sum _ {i=1}^ {n} $ soft $ \max $ (- $ \frac {1}{2} $ $ ((x-x_ {i})w)^ {2} $注意力评分上文所示高斯核其实就是注意力评分函数,进行运算后得到与键对应的值的概率分布,即注意力权重加性注意力一般来说,当查询和键是不同长度的向量时,可以使用加性注意力作为评分函数k $ \in $ $ R^ {h\times k} $ , $ W_ {q} $ $ \in $ $ R^ {h\times q} $ ,v $ \in $ $ R^ {h} $ a(k,q)= $ v^ {T} $ $ \tanh $ ( $ W_ {k} $ k+ $ W_ {q} $ q)等价于将key与value合并起来后放入到一个隐藏大小为$h$,输出大小为1的单隐藏层MLP缩放点积注意力直接使用点积可以得到计算效率很高的评分函数,但是点积操作需要K与Q拥有相同的长度d,此时如果将a(q, $ k_ {i} $ )= $ \langle $ q, $ k_ {i} $ $\rangle$ /$\sqrt {d} $ 除一个根号d的目的是为了消除长度的影响使用注意力机制的seq2seq之前提到使用两个循环神经网络的编码器解码器结构实现了seq2seq的学习,实现 机器翻译的功能循环神经网络编码器将可变序列转换为固定形状的上下文变量,然后循环神经网络解码器根据生成的词元和上下文变量按词元生成输出序列词元然而不是所有的输入词元 都对 解码某个词元 都有用,在每个解码步骤中仍使用编码相同的上下文变量在此时attention的加入就能改变这一点,科威助力模型Bahdanau,在预测词元时,如果不是所有输入词元都相关,模型将仅对齐输入序列中与当前预测相关的部分,这是通过将上下文变量视为注意力集中的输出来实现的模型图:上图就是一个带此结构的编码解码器模型图中,sources经过embedding后进入RNN形成 编码器,编码器对于每次词的输出作为key和 value(它们是同样的)解码器RNN对上一个词的输出是queryattention的输出与下一个词的词嵌入合并后进入下一次的RNN自注意力机制所谓自注意力就是KVQ都是来自同一个输入所得注:与RNN不同,自注意力机制拥有很高的并行度,复杂度较高位置编码自注意力并没有记录位置信息,所以要用到位置编码,位置编码将位置信息注入到输入里位置编码用于表示绝对或者相对的位置信息,可以是设定好的固定参数,也可以是由学习所得如下就是一种固定好的正余弦函数表示的固定位置编码假设长度为n的序列是n×d的shpe的X,那么使用n×d的shape的位置编码矩阵P来输出X+P作为自编码输入P $ \in $ $ R^ {n\times d} $ : $ p_ {i,2j} $ = $ \sin $ ( $ \frac {i}{10000^ {2j/d}} $ ), $ p_ {i,2j+1} $ = $ \cos $ ( $ \frac {i}{10000^ {2j/d}} $ )如图(比较抽象,花了很久理解)首先横坐标是不同位置索引的数据,不同的函数图像是设定好的,比如可以设定256个col,这个超参数的大小就蕴含了输出向量可以获取的位置信息,这样就保证了不同位置的输出绝对不一样,例如row为0时的输出为[1,0,1,0,1,0,1,0...],不可能存在第二个col输出与此相同的情况,而col的个数代表了蕴含的信息量,越多可获取就越多位置编码与二进制编码类似的效果二进制表示例:使用三位二进制数表示八个数字的信息如图所示,每一个位置,也就是横着拿出来一条,绝对找不到与之相等的一条了,这是不可能的transformertransformer架构transformer的编码器是由多个相同的层叠加而成的,每个层都有两个子层第一个子层是多头自注意力汇聚,第二个子层是基于位置的前馈网络收到残差网络的启发,每个子层都采用了残差连接transformer解码器也是由多个相同的层叠加而成的,并且层中使用了残差连接和层规范化。除了编码器中描述的两个子层之外,解码器还在这两个子层中插入了第三个子层,成为编码器-解码器注意力层,多头注意力多头注意力是一种特殊的使用自注意力的结构是说同一k,v,q,希望抽取不同的信息,例如短距离关系和长距离关系多头注意力使用h个独立的注意力池化,合并各个头输出得到最后的输出有掩码的多头注意力训练解码器对于序列中一个元素输出时,不应该考虑该元素之后的元素,可以通过掩码来实现,也就是计算$X_i$输出时,假装当前序列长度为$i$基于位置的前馈网络也就是图中的逐位前馈网络实际上就是全连接,batch_size,n—》序列长度,dimension由于n的长度不是固定的将输入形状由(b,n,d)变换成(bn,d)作用两个全连接层输出形状由(bn,d)变换回(b,n,d)等价于两层核窗口为1的一维卷积层层归一化self attention加性注意力一般来说,当查询和键是不同长度的向量时,可以使用加性注意力作为评分函数k $ \in $ $ R^ {h\times k} $ , $ W_ {q} $ $ \in $ $ R^ {h\times q} $ ,v $ \in $ $ R^ {h} $ a(k,q)= $ v^ {T} $ $ \tanh $ ( $ W_ {k} $ k+ $ W_ {q} $ q)等价于将key与value合并起来后放入到一个隐藏大小为$h$,输出大小为1的单隐藏层MLP缩放点积注意力直接使用点积可以得到计算效率很高的评分函数,但是点积操作需要K与Q拥有相同的长度d,此时如果将a(q, $ k_ {i} $ )= $ \langle $ q, $ k_ {i} $ $\rangle$ /$\sqrt {d} $ 除一个根号d的目的是为了消除长度的影响现在使用的都是点乘attention
2024年06月02日
36 阅读
4 评论
0 点赞
2024-06-02
Meta Learning 元学习
Meta Learninglearn to learnmeta-X ---》X about X学习如何学习machine Learning是寻找一个函数 定义损失 优化什么是元学习?训练资料作为输入 LOSS取决于训练任务,每个任务中有训练资料与测试资料在元学习中需要考虑多个任务 例如分类过task1的表现后,再看task2的表现最后的loss=$l_1$ + $l_2$得到总体的loss在传统机器学习任务中,我们一般使用训练集的误差作为最终loss而在元学习中我们使用测试集误差作为loss经过训练后我们学到了学习的算法这时候我们使用学习的算法 进行测试将其使用在测试任务,将测试任务的训练资料放进去进行学习学出来一个分类器 将其作用在测试任务的测试集中few shot Learning 与 元学习的关系 :fewshot(目标)经常使用元学习(手段)开始套娃meta L VS ML都有over fitting都要调参 但是meta是调调参的参数 一劳永逸
2024年06月02日
21 阅读
0 评论
0 点赞
2024-06-02
SSL综述
SSL(SoundSourceLocation)声源定位,是是我们任务一的主要研究主题题我们通过这一文献A survey of sound source localization with deep learning methods中的简要介绍了解到声源定位大多数场景下的主要任务其实是DOA,也就是direction of arrival关注于方位角与仰角的研究,并不注重于距离的研究传统的SSL方法是基于信号/信道模型和信号处理(SP)技术。尽管多年来它们在该领域的显着进步,但在可能存在噪声、混响和几个同时发射声源的困难但常见的场景中,它们表现不佳。在近几年,深度学习成果不断涌出,很多研究都证明DL方法在一些SSL场景下比传统方法更优秀,尽管如此,在过往对于SSL问题解决的综述中只有很少提及到DL方法,本文就是为综述DL在SSL方向的应用而作,总结近几年间使用的DL on SSL方法针对DL SSL方法,我们一般使用麦克风阵列获得的多通道输入信号进行特征提取后作为输入特征输入神经网络 最后得出DOA的预测在最新的一些研究中,特征提取模块往往被省略掉,多通道信号直接输入DNN麦克风阵列中,麦克风之间的距离相比于麦克风到声源的距离要近,虽然从信号波形上来看他们差不多但是在延迟与振幅方面都有或多或少的差距,这些差距主要来源于源到不同麦克风的不同传播路径,对于直接路径和在室内环境中组成混响的大量反射麦克风信号通常使用时频(TF)表示,使用短时傅里叶变换SSL的一大难点就是不同源头的声音在传播时,在时间轴上有了重合,其实就是同时有多个音源进行发声,如何准确分离他们也是一件很重要的任务,出现反射现象与嘈杂环境的时候,声源之间的位置关系较为复杂传统难点:多音源同时发声反射噪声传统方法通常对于情况进行假设后进行建模,在真实世界中并不都能起到作用而深度学习方法能够对于真实的数据进行适应,当然这也造成了DNN缺点:DNN方法在一般场景下的主要缺点就是不通用高效(受限于训练成本与所需数据量)深度学习的缺点就是如果给定配置发生变化 得出的结果也不满意方法分类TDoA当麦克风阵列形状已知时,DOA估计可以通过估计麦克风之间源的到达时间差(TDoA)来决定GCC-PHAT具有相位变换的广义互相关(CC)方法(GCC-PHAT)是处理2麦克风阵列时最常用的方法之一,它被是两个麦克风信号之间的交叉功率谱(CPS)的加权版本的逆傅里叶变换广义互相关函数表示的就是同一声源在时延 s 下两个麦克风信号之间的相关性。$X_i(f)$是麦克风信号经过傅里叶变换后的频域表示使用复共轭(*)是一种特殊的处理办法,只有这样才能保留交叉功率谱的相位差接下来我们进行PHAT加权 其形式就是公式主体部分,使用获得的交叉功率谱除以幅值通过寻找使得广义互相关函数最大的时延参数,即两个麦克风获取的信号相似度最高时,达到最好估计时间差的效果,这样能够获得最准确的时间差目前GCC方法已经扩展到了两个以上麦克风的情况这种方法本身具有一定的抗噪声与抗混响能力,但是在信噪比降低、混响增强时,该算法性能急剧下降SRP-PHATTDOA这种方法没有用到阵列整体的优势,缺乏稳健性。而基于可控响应功率(SRP)的波束形成技术,具有较强的稳健性、抗噪性,以及具有一定的空域滤波性能,能够提高信号的信噪比,增加探测距离。在确定声源位置时,一般采用最优化算法,最小二乘法容易陷入局部极值点,而基于自然选择法则的遗传算法(GA)模拟生物进化过程,具有并行计算的特点,是一种全局搜索算法,能够得到全局最优解。将基于可控响应功率的波束形成技术和遗传法算法应用于枪声定位系统中,并通过实际的试验数据对此方法进行了验证,从结果来看具有较高的精度。基于相位变换加权的可控响应功率的声源定位算法这种方法具有较强的鲁棒性 但是在低信噪比的环境下定位性能较差,计算量较大,不经常使用SRP-PHAT对阵型没有特定要求,因此也适用于分布式阵列,事实上很多基于分布式阵列的定位系统采用了该算法。这种方法就是在空间中一点做出所有麦克风对信号的GCCPHAT和,在整个声源空间中寻找使得SRP值最大的点即为声源位置估计MUSIC基于高分辨率谱估计的声源定位方法:通过分析每个元素信号之间的相关性,构造 出一个拟合矩阵,从而确定声源位置。MUSIC算法首先通过将阵列接收到的信号进行空间谱估计,得到信号在不同方向到达时的空间谱。然后,通过对这些空间谱进行分解,可以找到信号所在的方向。将阵列输出数据的协方差矩阵进行特征分解,从而得到与信号分量相对应的信号子空间和与信号分量相正交的噪声子空间。 利用这两个子空间的正交性,构造一个空间谱函数,该函数在信号源所在方向处具有 尖峰。通过搜索空间谱函数的峰值,可以得到信号源的方向估计。1、构建信号接收矩阵,将阵列接收到的信号按照时间在矩阵中排列,每一列对应一个传感器接收到的信号。2、利用接收信号矩阵计算协方差矩阵,并对其进行特征值分解,得到信号的空间谱。空间谱表示了信号在不同方向到达时的能量分布。协方差矩阵描述了各个传感器接收到信号之间的相关性和变化。对协方差矩阵进行特征值分解。特征值分解是一种将矩阵分解为特征向量和特征值的操作。在这里,我们得到的特征向量描述了信号在各个方向上的空间谱,而特征值表示了信号在这些方向上的能量。为什么通过特征分解能够得到各个方向上的空间谱,并且能够构成信号子空间与噪声子空间,3、利用空间谱进行DOA估计,通过对空间谱进行分析,可以找到信号的主要方向。在MUSIC算法中,通过选取空间谱中的极值点(通常是最小的N个特征值对应的特征向量),可以确定信号的方向到达。https://zhuanlan.zhihu.com/p/613304918
2024年06月02日
11 阅读
0 评论
0 点赞
1
2
3
4
5