- 博客(110)
- 收藏
- 关注
原创 几种不同的Norm与代码实现 (BatchNorm, LayerNorm, GroupNorm, RMSNorm)
这里的均值和方差在训练的时候会通过动量更新,动态的根据每次的batch去估计整体数据集上的均值和方差,最后一个时刻的记录值会被用于测试时使用。而在训练的时候每一次都是使用当前的数据集上的估计值。LayerNorm经常使用在NLP中,因为在一个Batch内句子的长度不同,这导致每个句子中相同的位置没有类似的特征,而且存在pad这种情况,这导致跨批次的正则容易出现问题,于是LayerNorm更多的被使用。需要特别注意的是,在训练的时候,采用的是有偏方差估计,而存储用于测试时计算的是无偏方差估计。
2025-03-12 14:38:48
834
原创 Docker安装&使用
有时在初始化一个容器时,容器内的某个目录下有一些东西这些外部的宿主机目录是没有的,如果强行挂载会导致挂载失败容器直接无法启动。有时候,我们可能部署多个容器,容器内的服务可能需要互相通信(例如前端和后端),这就需要配置容器之间的网络。此时就停止了原本的nginx所在的容器,此时使用docker ps是看不到任何的容器的,但是并不意味着容器被销毁了,其实没有的。最保险的做法是通过域名来访问。所有的容器的修改都只发生在容器层,所有的底层Image都不会被修改或者删除,更像是软删除,软修改这样的操作。
2025-01-05 21:55:27
692
原创 Flow-based models(NICE);流模型+NICE+代码实现
此时还存在一个问题,那就是输入的图片大多都是稀疏的,也就是说某些维度空间可能并不重要。,那么此时对应的x’也会有一个变化区间,由于这个区间过于小,所以可以近似当做是一个矩形。Flow-Based模型想要构造出一个可逆的模型,也就是说可以把图片正向输入得到一个向量,把这个向量反向输入就可以得到图片。换句话说,Flow-Based模型是一个由输入的空间到输出的空间的双射。也就是说,我们首先对第一部分进行了直接复制,第二部分的输出则是由第二部分加上一个第一部分的非线性变换组成的。同理,后面每一层的det都是1。
2023-11-05 17:04:14
889
原创 VAE模型(详细推导+实例代码)
文章目录EM算法思路E步M步直观感觉GMM模型VAEVAE思想从GMM到VAE公式推导重参数VAE+神经网络另一个视角的VAE思想为什么引入encoder为什么要重参数噪声与重建Discrete VAE本文会从EM算法,GMM模型一步一步的的推导,在过渡到VAE模型,如果有熟悉的部分可以跳过。最后参考的资料会被列出在末尾。EM算法思路首先回顾一下EM算法的过程:假设X是全体样本,θ\thetaθ是全体参数。那么MLE求解生成模型就是要求得一个θ\thetaθ,使得P(X∣θ)P(X|\theta)
2023-10-12 14:03:58
1898
原创 Rust语法:所有权&引用&生命周期
所以此时Rust要求你对传入的参数的引用的生命周期加以限定,以保证返回值的生命周期是可以被Rust编译器推断的(没错,生命周期标注就是为了告诉Rust编译器你的返回值的生命周期是多大,从而让Rust能够检查出潜在的悬空指针错误))是固定的,在编译时就已经确定的了。于是Rust推断出了返回值引用的生命周期,这是因为返回值的生命周期只可能来自于输入,因为函数内部的创建的对象,在返回引用时会造成悬垂引用(因为函数一结束,被引用的对象就失效了)。一个大的生命周期的变量借用了一个小的,所以才会导致了错误的发生。
2023-08-15 21:52:27
1670
1
原创 Rust语法: 枚举,泛型,trait
枚举的定义格式如下:enum 枚举名{值1(附加类型),值2(附加类型),…其中,关联类型可以省去例如要创建一个神经网络类型的枚举,就可以这样定义CNN,RNN,GAN,GNN下面是传参和创建的例子,其中引用的部分可以看后面的,所有权&生命周期这一部分。CNN,RNN,GAN,GNNfn main(){//创建一个NeuralNetwork类型的枚举,值为CNN//给函数传参。
2023-08-12 23:52:33
1215
原创 Rust语法:变量,函数,控制流,struct
Rust的struct定义如下:struct 名称{变量1: 类型,变量2: 类型…而struct的初始化则是使用名字+变量名:值的形式初始化,注意,struct不允许有字段为空值,也就是说需要全部值都初始化width: 10,length: 19而这些值的访问就类似于C的struct,直接用点+对应的字段即可。struct也可以设置为mut,而对于struct来说,一旦设置为mut,则里面每个值都必须要是mut,也就是说都是可变的。
2023-08-10 23:53:28
1563
1
原创 (Python):元类(metaclass), Type类,类实例,dataclass
每一个类都会有一个Metaclass,这个Metaclass就是用来创建自身类的实例的,如果没有指明Metaclass,那么这个值默认就是type。类成员变量属于类的属性,类的对象虽然可以访问,但是无法修改,一但对象尝试修改,Py就会自动的在对象中创建一个同名成员变量,然后赋值。dataclass是py提供的一种数据接口,我们可以通过它来定义数据类,我们通过类装饰器的方式来装饰类就可以把类变成数据类。在python中,所有的类都是一个实例,也就是说,所有的类其实都是由自己的属性和方法的。
2023-07-25 20:24:15
349
原创 BERT原理&Fine Tuning&Bert变种
CLS是BERT用于分类句子的标记,如果需要对整个句子进行分类,则只需要把CLS的输出部分进行处理即可。而且对于太长的句子,Transformer的计算难度会变的非常大,比如Bert中一般限制输入句子最长长度为512,再长可能效果就不好了。这不用担心,因为虽然顺序打乱,但是位置编码还是原序的编码,所以每个词的原本位置信息仍然是保留的了。假设我们的Transformer每次都只计算的句子的某个固定长度区间,除此之外,还会像RNN一样看一下前面的序列的计算结果。需要注意的是,ALBert并没有减少计算量。
2023-05-10 19:16:03
2696
原创 Pytorch的CNN,RNN&LSTM
可以看到有两个参数,一个是wi=(5, 3)一个是wh=(5, 5),第一个参数wi用于乘以输入的数据,而第二个参数wh用于和隐藏层的向量相乘,在结合官方给出的RNN计算,我们就可以手动模拟以下RNN的推理过程了,RNN有两个输出,一个是out_put,一个是h_0。由于输出通道要除以groups,所以输入通道的数目会减少,此时每一个卷积核要负责的输入通道也就减少了,也就是说,卷积核的参数数目会减少groups倍,这就是分组卷积的意义。padding:填充,同样的可以是一个元组。一共有4个5x5的数据。
2023-04-25 10:54:15
1179
原创 Pytorch的几种常用优化器
AdamW与Adam基本类似,但它的效果一般更好,他做出了一个比较重要的改变,那就是吧weight decay给抽离出来,不让其参加自适应grad和平均梯度的计算,因为weight decay提供的信息与梯度无关,会造成干扰。RMSprop修改了求自适应梯度的算法,Adagrad在求梯度时平等的考虑了所有历史的梯度,但是这可能会影响后续的计算所以RMSprop又给加了一个权重,用于削弱太久远的梯度对最近梯度的影响。所以这里其实是和把以往梯度和现在的梯度做了一个平均化,也有类似momentum的效果。
2023-04-24 08:37:28
935
原创 反向传播推导+numpy实现
很久没有看深度学习了,忘了好多东西。本来想着推导一下,后来发现自己不会了。再看看以前写的代码,又避开了最终的东西,于是决定重新推导一下。
2023-04-15 18:21:16
743
原创 with,async,await用法以及协程
以前用with时,总是觉着这玩意就是用来管理IO的,后来发现在很多其他地方也用到了,而且和IO操作无关,于是我便认识到我对这个关键字的理解产生的偏差,所以这里重新记录一下我对这几个关键字的学习。难道是线程的继续的细分么?此时可以发现,我们await的是多个携程函数,而返回值也变成了两个值,我们通常只用第一个,里面包含了携程函数的信息和携程函数的返回值。而await后面加的是要等待的操作,在加入await后如果发生类似于IO阻塞的情况,此时就会主动地切换到其它的task执行。这是当然可以的,这就是协程。
2023-03-30 15:55:30
886
原创 Pytorch--学习率调整策略的使用(自定义学习率衰减)
文章目录优化器的学习率和参数optimizer的param_groups多学习率封装好的lr调整策略自定义学习率衰减学习率的调整在训练的过程中很重要,通常情况下随着训练的进行,模型的参数值逐渐趋于收敛,学习率会越来越小。即使如此,学习率的衰减速率的变化也是会有所不同,对于一些特殊的任务我们更是希望能以一些比较特别的方式甚至自己定义的方式来调节学习率,下面就来记录一下Pytorch的学习率调整策略。优化器的学习率和参数首先来看一下Pytorch的优化模块,torch.optim。optim模块提供了
2021-08-03 17:44:19
7251
1
原创 Transformer代码实现(pytorch)+原理
最近看了看Transformer,来做一下笔记,代码部分并非我写的,我只是借用解析一下,至于是谁写的我也不太清楚,如果有人知道可以回复我一下,到时候我贴上引用。文章目录Attention的发展史Attention的发展史...
2021-07-06 10:58:21
940
7
原创 文本树形图绘制工具/文件目录绘制工具/Python
最近在做项目,想绘制一个项目的结构图,为了图方便所以想采用文本的方式上网上找了好长时间都没找到合适的生成工具,于是自己索性写了一个效果:代码:import osclass TreeNode: def __init__(self, name: str=None, child: list=None) -> None: self.child = child self.name = nameclass TreeGenerator:
2021-06-08 09:46:19
1582
3
原创 NLP--主题模型(LDA)/推导+numpy代码实现
文章目录引入LDA的概率图潜在狄利克雷分配几个分布共轭先验生成流程学习算法吉布斯采样numpy实现collapsenumpy实现推断引入LDA的概率图潜在狄利克雷分配几个分布共轭先验生成流程学习算法吉布斯采样numpy实现collapsenumpy实现推断...
2021-05-29 09:19:49
1389
1
原创 机器学习--坐标轴下降法
推导坐标轴下降法的思路就是每次选择一个维度,固定其他维度,然后使选择的这个维度达到最优,然后反复的这么做直到收敛。比如有一个函数 g(x1,x2,...,xn)g(x_1, x_2, ..., x_n)g(x1,x2,...,xn),我们想用坐标轴下降的对其进行优化。那么就有:第一步,先固定一个维度,比如说固定x2x_2x2,此时除了x2x_2x2以外,其它的数字都是常量。第二步,我们对x2x_2x2求导,然后令导数等于零求出一个极大值。第三步,如果没有收敛就重复1,2步,否则收敛结
2021-05-20 09:02:38
987
1
原创 极大似然估计,最大后验估计,贝叶斯估计
文章目录频率学派vs贝叶斯学派MLEMAPBE假设有数据X={x1,x2,...,xn}X=\{x_1, x_2, ...,x_n\}X={x1,x2,...,xn},模型P(x∣θ)P(x|\theta)P(x∣θ)其中θ\thetaθ表示模型的全部参数。那么该如何对θ\thetaθ进行估计呢?频率学派vs贝叶斯学派对于θ\thetaθ是否是一个服从某种分布的随机变量这个观点,各个学派持不同意见。其中认为θ\thetaθ是一个未知常量的学派,就是频率学派,他们认为θ\thetaθ是一个常量
2021-05-19 20:24:23
260
原创 机器学习--结构化感知机
结构化学习对于现实中的问题,总是多种多样的,我们不单想要预测一个连续的值,或者一个类别,有时我们可能还需要输出一个具有结构的结果,比如一个序列,一棵树,一个列表之类的,此时我们就需要用到结构化学习。结构化学习可以解决结构化预测的问题,即我们的输出既有值还有对应的结构,结构化学习有一个通用的框架,具体如下训练:寻找一个合适的函数score(x, y)其中x为输入y为输出。score可以评价输入和输出之间的分数,分数越高,说明y越准,我们也把score叫做打分函数。预测:输入一个x,其预测结
2021-05-06 08:57:12
1926
1
原创 NLP--语言模型
文章目录引入n-gram性能评价交叉熵困惑度平滑自适应语言模型使用二元语言模型进行分词Neural Language ModelRNN language model引入语言模型(language model)在许多NLP任务里都有应用,比如分词,词性标注…等等,所以一个好的语言模型是十分重要的。首先,先来看一下设么是语言模型。语言模型有一个输入一个输出,输入是一个句子,输出是这个句子的概率,即P(sentence)P(sentence)P(sentence)比如,"我喜欢吃苹果"这句话,对于语言
2021-05-04 15:53:59
726
原创 机器学习--EM算法
引入当我们假设了一个概率分布之后往往需要做的是进行参数的估计,比如我们假设了一个概率分布P(y)他表示随机变量y的概率分布,我们此时还有一些样本y1,y2,y3...yny_1, y_2,y_3...y_ny1,y2,y3...yn我们需要对这个概率分布的参数θ\thetaθ进行概率估计。我们最常使用的概率估计是极大似然估计也叫做MLE,它的做法就是找到一个θ\thetaθ让所有的样本的出现概率尽可能大,即:θ^=arg maxθ(∏i=1np(yi))\hat\theta =\argmax
2021-04-18 10:49:50
187
原创 NLP--Glove
原理word2vec在词表示上有着很好的效果,但是word2vec忽略了词在统计上的一些规律,因为如此Word2vec需要学习大量的数据才能得到好的效果,而Glove则考虑了词之间统计上的数值关系。co-occurrence probabilityGlove认为co-occurrence probability可以对词的意思进行编码,首先先看统计上很容易估算出的一个后验概率P(wj∣wi)=XijXi=PijP(w_j|w_i)=\frac{X_{ij}}{X_i}=P_{ij}P(wj∣wi)
2021-04-06 16:03:40
182
原创 NLP--Word2vec
word2vec简介word2vec是一种词表示的方法,于2013被Google团队发表,他包含两个主要的模型一个是skip-gram一个是CBOW。word2vec的思想是通过一个词在句子中周围的词来理解这个词。skip-gram旨在通过周围的词预测指定的词,CBOW则相反。skip-gram给出一个句子比如"I love this cute dog",假设他的中心词汇是love(这个中心词汇就是我们想要了解的词)那么我们此时选择一个窗口w,我们把love左边w个词和右边的w个词称为love的周
2021-04-06 08:26:56
260
1
原创 深度学习--猫狗大战pytorch实战
文章目录数据准备&处理模型构建训练kaggle上的一个经典项目,拿来做做算是当CNN入门了我把整个项目分成了四块config用来配置一些参数,Dataset用来构建数据集Main用来训练和保存数据等,Module用来放构建的模型config的配置如下TRAIN_PATH = r'D:\temp\train'PRE_PATH = r'D:\temp\test1' BATCH_SIZE = 200 # batch_sizePIC_SIZE = 100 # 图片的大小数据准备&am
2021-02-23 11:14:16
1375
原创 DRIVER_POWER_STATE_FAILURE蓝屏的修复方法
最近莫名出现了DRIVER_POWER_STATE_FAILURE蓝屏,七天出现了两次于是决定把它修复一下。首先我下载了蓝屏分析工具BlueScreenView 然后发现两次导致异常的都是驱动ntoskrnl.exe于是上网查了一下解决方法。试了以下这两个方法。第一种以管理员方式打开终端,然后输入CHKDSK C: /F回车第二种使用DirectX修复工具 3.7 标准版,然后在工具里面的选项里,首先先进行获取扩展,然后在高级里把C++强力修复和API sets强力修复都勾上,然后选择修复。都做
2021-02-21 16:14:47
29327
2
原创 深度学习--前馈神经网络
文章目录感知机反向传播(Backpropagation)前向传播反向传播Tips for training激活函数梯度消失&梯度爆炸初入深度学习,有错的地方还请指正。参考视频: 李宏毅深度学习参考书籍:西瓜书,花书前"馈神经网络"也叫"多层感知机"也叫"深度前馈网络",是一种典型的深度学习模型。它的目的是近似某个函数。感知机感知机由两层神经元组成,一个是输入层,一个是输出层,如下图,左边的是输入层,右边的是输出层。输出层是一个MP神经元,MP神经元会把输入的数据结合上他的权值,然后通过
2021-02-14 21:07:08
1010
原创 机器学习--朴素贝叶斯
原理设一个训练集为{(X1,y1),(X1,y2)...,(Xn,yn)}\{(X_1, y_1), (X_1, y_2)...,(X_n, y_n)\}{(X1,y1),(X1,y2)...,(Xn,yn)}其中Xi(i∈{1,2,...,n})X_i(i \in\{1,2,...,n\})Xi(i∈{1,2,...,n})有m个特征,给出一个新的数据XkX_kXk,现在任务是要预测XkX_kXk的类别。以前很多其它的算法都是根据预测数据的特征数值计算一个概率,然后选择概率最大的一个
2021-01-29 23:14:09
123
原创 爬虫笔记
学一下爬虫,做一下笔记文章目录RequesturlopenrequestGetpost准备材料:python3基础fiddlerchromeRequesturlopen从request模块中导入urlopen,可以直接使用这个函数来解析一个url,然后返回一个HTTPResponse对象。可以使用read来读出然后进行解码。from urllib.request import urlopenresponds = urlopen('http://www.baidu.com')html
2021-01-29 23:13:38
450
原创 机器学习--决策树
文章目录决策树的思想分类树信息熵信息增熵基尼系数CART简单实现剪枝sklearn的分类树回归树sklearn的回归树决策树的思想决策树的思想在现实中也非常常见,比如买一个东西,我们在想买或者不买,就会经过类似以下的决策过程:决策树也是如此,比如我们要解决一个分类问题,也可以借助类似的过程,然后对输入的数据进行分类。在分类树中每一个叶节点都是一个类别,而每一个内部节点对应着一个规则条件。分类树分类树就是用来解决分类问题的决策树。一颗决策树的学习过程分为:特征选择,决策树的生成,剪枝三个过程
2021-01-08 19:38:39
341
原创 机器学习--支持向量机(SVM)
文章目录引入函数间隔和几何间隔函数间隔几何间隔Hard Margin线性可分Soft Margin线性可分核函数引入回忆LogisticRegression的思想,它最开始的思想是寻找一个超平面来把特征空间一分为二,然后两边各算一类。那么问题就来了,对于一个能明确由一个超平面划分的特征空间,能把所有样本一分为二且能完美划分的超平面数肯定是有无限多个的,比如下面这种。L1和L2和L3都可以把特征空间分成两部分,而且都完美的把所有的训练数据进行了分类,那么他们之间谁更好一点呢,此时就需要回到最开始类似
2020-12-27 16:05:01
108
原创 拉格朗日对偶性
由于在支持向量机的推导中需要用到这个东西,所以就顺带着当前置知识记录一下,其过程与《统计学习方法》一书中的过程一致,并加入了一些个人的理解。文章目录1.原始问题2.对偶问题3.原式问题与对偶问题的关系1.原始问题假设f(x),ci(x),hi(x)f(x),c_i(x), h_i(x)f(x),ci(x),hi(x)是定义在RnR^nRn上的连续可微函数,那么考虑一下以下的约束最优化问题。minx∈Rnf(x)s.t. {ci(x)≤0,i=1,2
2020-12-13 14:21:51
116
原创 机器学习--分类标准
文章目录分类准确度精确率与召回率(查准率与查全率)平衡点与F1分类准确度分类准确度是常用的一种评测模型的标准,假设训练出的模型是fff,测试集是XXX,则分类准确度为1m∑i=1mI(f(X(i))=yi)\frac{1}{m}\sum\limits_{i = 1}^m \mathbb{I}(f(X^{(i)}) =y_i)m1i=1∑mI(f(X(i))=yi)其中I\mathbb{I}I表示指示函数,后面的表达式如果为真那就返回1,否则返回0。分类准确度表达了对于所有的测试数据模型能够预
2020-12-10 18:26:47
723
原创 机器学习--逻辑回归
理论逻辑回归是一种二分类算法,逻辑回归实质是去试图找出一个边界把样本空间一分为二,然后在不同的区域中就是不同的类别。就如下面这张图,蓝色区域与黄色区域被一条直线分开。我们可以假设这条直线是,假设有样本(x1,y1),(x2,y2)...(xm,ym)(\textbf{x}_1,y_1), (\textbf{x}_2,y_2)...(\textbf{x}_m,y_m)(x1,y1),(x2,y2)...(xm,ym)则我们想要找这个边界可以写成y=xTθ+by=\textbf{x}^
2020-12-05 16:51:14
164
原创 机器学习--多项式回归
文章目录多项式回归引入多项式回归多项式回归引入在线性回归中我们可以用一条直线来拟合具有线性关系的数据,但是并不是所有数据又具有线性关系。而对于这些非线性关系我们就可以尝试使用多项式回归来进行拟合。比如有一个呈现出如下关系的数据集。我们可以发现,如果我们使用一个二次曲线来进行拟合会有更好的效果,所以此时我们就需要进行多项式回归。回忆对于线性回归,我们是设出了一条直线y^=θ0+x1θ1+x2θ2+...xnθn\hat y=\theta_0+x_1\theta_1 + x_2\theta_2
2020-11-26 08:42:14
586
原创 机器学习--梯度下降法
基本原理假设有一个函数,想要寻找的它的极值,该如何得出呢?最直观上可以直接使用公式得出。但是有时用公式计算的速度可能并不快,比如使用正规方程解出当前样本的最佳拟合直线,这个的计算量就很大,而且有时有些函数可能没法找到一个合适的公式来直接得出,这时就需要用到梯度下降法了。高等数学中有这么一句话,沿着梯度方向下降/上升的速度最快。举个例子,比如二次函数,随意找一个点,沿着它的梯度方向(这里也就是导数)肯定是最快的。同时,可以发现,如果沿着梯度的反方向前进的话就可以逐渐的逼近极值。所以就可以大概的
2020-10-15 19:31:32
160
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人