- 博客(46)
- 收藏
- 关注
原创 机器学习--随机森林
标准的好坏用基尼系数来表示,基尼系数:衡量不确定性(标准的不确定性)事实证明不确定性月低越好,预测结果越稳定。简单理解,随机森林就是构建二叉树过程中通过选择不同的基准使得基尼系数最低,然后进行分类的过程。决策树的生成过程中涉及过拟合问题,可能需要剪枝操作。按照一定顺序,使用多个标准对值进行决策分类预测。
2024-08-12 13:46:32 256
原创 程序设计---二分
1.先找个中间值mid=(l+r)/2, if(check(mid))假设性质为红色的性质,那么这个时候check一下,这时分为true或者false,如果是true的话那么红色一定满足,那么mid就在红色区间里,这个时候答案可能在[mid,r)中,那么就将l更新成mid,当mid不满足红色性质的时候,那么mid一定是在绿颜色的这个地方,那么答案就在[l,mid-1)中,那么我们可以找到这个性质,来寻找边界,即可二分红色边,也可二分绿色边。本质并不是单调性,有单调性一定可以二分,有二分不一定有单调性。
2024-05-11 01:15:59 282
原创 程序设计--归并排序
归并排序--分治(稳定的(就是说一个数组中有两个一样的数,当数组排序完后,两个数的位置不发生改变,那么我们就说他是稳定的))快排是不稳定的,那么如何让快排稳定,就加入他的下标,这时候所有的值就不同了,那么就稳定了。1.找分界点,确定分界点mid,取左右两边的中间值mid=(l+r)/2。那么这时候比较这两个序列里面的最小值,就可以得到整个序列的最小值。将最小值,依次放到后面,且该指针后移一位,重复以上过程。3.归并---合二为一(双路归并,合二为一)o(n)用两个指针分别指向序列的第一个值(最小值)
2024-05-10 21:22:54 252
原创 算法程序设计-快速排序
左面的指针先走,当左面指针对应的数据小于x时,继续往后走,当左面指针对应的数据大于x时,i就停下来,则去移动j指针,同理当j大于x时,指针向左移动,当j小于x时,指针停止。当两个指针都停止时,进行swap交换,那么交换完,继续按照以上步骤执行直到i和j相遇,那么左面的数据均小于x,右面的数据均大于x。第二步调整范围:L |--------<=x|>=x------------| R。最后将a,b放进数组q中,可以实现,左边的均小于x,右面的均大于x。另外定义两个数组a[],b[]第三步递归处理左右两端。
2024-05-09 19:02:43 193
原创 深度学习-优化策略
3.动量法momentum,优点:加上了原始动量(梯度累积)且对于变量给了参数,给了一种惯性,使得其在正确的方向上,下降更快,而且容易跳出局部最小点。缺点:无法调整学习率,容易发生震荡,收敛慢,容易出现在鞍点上,处于局部最大值。优点:可以自适应的调整学习率,不同量级的参数能更好的收敛(使得梯度大的学习率变小,使得梯度乘以学习率后为一个可以接受的值,能够减少震荡)。优点:给累计梯度增加了参数,学习率进一步优化,给累计梯度和和当前梯度增加参数,计算公式不变。更新的时候用的不再是梯度,而是参数的动量值。
2024-04-21 21:27:44 479
原创 transformer--decoder的学习
(这个vector长度有很长,跟vocabulary的 size是一样的-而vocabulary是decoder的输出单位,若输出的是中文,那么可能是中文方块字的数目-可以理解为是一个字典的数目),不同语言的输出单位不会一样,比如英文可以选择输出字母A到Z,或者是选择输出英文的词汇,英文的词汇是用空白作为间隔的,就比较多。decoder看到的输入,其实是他前一个时间点自己的输出,decoder会把自己的输出当做接下来的输入,(稍等介绍以下encoder的输入),那么如何停止呢,这个时候就需要一个end符,
2024-04-18 20:11:11 516
原创 Transformer与BERT的理解
其中self-attention输出的是本向量是考虑了所有的输入的向量后所得到的结果,而且结合它自身,得到新的向量,其中结合用的是residual connection(残差连接),得到新的向量后,再做一次normalization(layer normalization而不是batch normalization),不用考虑batch的资讯(输入一个向量,输出另一个向量),它做的是计算mean和deviation。整体如以下的输出:(其中的positional encoding是位置资讯的输入)
2024-04-11 22:12:36 378
原创 交叉熵的理解--从数学角度分析
但是当分布中的4个事件不是等可能的,虽然可以依照前面的编码,平均编码长度就是3,或者可以用编码4个等可能事件的方式,平均编码长度就是2,编码长度与4个等可能的事件没什么区别,但是小鸟依然觉得很累,因为事件A的发生概率最大为1/2,也就是说小鸟会经常性的传递事件A,事件A的编码可以短一些,这样有利于平均编码长度最短。若我们要拉近两个分布的距离,在一般的固定数据的情况下,观测分布就是确定的,观测分布的信息熵就是一个常数,最小化kl散度就等于最小化交叉熵。这样看起来一个分布下平均最短编码长度是不断试出来的。
2024-04-05 21:32:48 778
原创 sigmoid函数到底是怎么形成的,然后其与逻辑回归的关系
那么那个决策边界是最好的呢,这时候便需要确定一个损失函数,来描述决策边界应该满足什么条件,这可以用上一章的最大似然估计来完成,假设y对eta的分布是个伯努利分布,但是p(事件发生的概率)是不确定的,也就是分类为1或者是0的概率。sigmoid函数具有单调性,可以赋予辨别概率,若观察sigmoid曲面与投影,可以看到即使在曲面的同一侧,其概率也是不同的,距离曲面越近的越容易发生变化,反之距离越远的数据属于这个类的概率就越大。值域的范围发生变化,那么可以引入一个中间变量eta,eta表示线性模型的输出结果。
2024-04-04 21:46:51 233
原创 最大似然估计(MLE)--从数学知识看待机器学习
下面我们对数据中x和y分开看待,将目标值y看成是一个高斯分布中采样而来的数据,在给定x的情况下,y是不确定的,现在的数据只不过是其中的一种采样结果。那么,我们想知道的是哪一个高斯分布使得上述的数据出现的概率最大,每一个数据被采样的概率都可以写成一个条件概率的形式,其中u和sigma都是一样的,同时他们相互独立。这就是极大似然估计的基本思想。由于x*x的结果总是在y=x的下方,所以最后得到的结果可能会很小,甚至趋近于零,那么用取对数的方式可以改变连乘的方式,使其成为连加,那么,也不会影响其求得最大值。
2024-04-04 21:11:54 552
原创 逻辑回归--logic的相关知识
这样凹凸不平的函数,我们在使用梯度下降法求解最小值的时候是极易陷入局部最优解的,非常讨厌!于是便调整了代价函数(具体为啥调整,可能是前辈们调了多种后能得到的还不错的代价函数)。1.logic的本质是分类问题即寻找边界值或者边界函数,然后可以那二分类法举例,非零即使一,然后逻辑回归就是将线性回归与sigmod函数结合在一起。上图中这个函数,其实很容易理解了,我们用上面那个式子衡量某参数下的假设函数对自变量预测值和实际值之间的差距大小,然后把m个差距求和。到了逻辑回归这里,其实代价函数就变简单了,为什么呢?
2024-04-04 20:07:24 626
原创 上采样与下采样的区别
它可以将低分辨率的图像或小尺寸的图像放大到更高的分辨率或尺寸,以改善图像质量或使图像更适合特定的应用场景。可以通俗理解成,上下采样的直观结果就是图像清晰度,同样大小的原图,经过上下采样缩小到同样的尺寸,上采样清晰度高,下采样清晰度低,也就是模糊。下采样可以理解为压缩提取出来的特征,使得其更加模糊,下采样的方式可以分为:最大池化法,和卷积法(步长为2卷积提取特征,使图像变小。总的来说,下采样是一种常用的图像处理技术,用于降低图像的分辨率或尺寸,以满足特定的需求和应用场景。
2024-04-02 22:03:52 1205
原创 为什么正则化能缓解过拟合的情况
如下图所示,过拟合,就是拟合函数需要顾忌每一个点,最终形成的拟合函数波动很大。在某些很小的区间里,函数值的变化很剧烈。这就意味着函数在某些小区间里的导数值(绝对值)非常大,由于自变量值可大可小,所以只有系数足够大,才能保证导数值很大。参考链接:https://www.zhihu.com/question/20700829/answer/16395087。过拟合的时候,拟合函数的系数往往非常大,而正则化是通过约束参数的范数使其不要太大,所以可以在一定程度上减少过拟合情况。说说为什么过拟合的时候系数会很大。
2024-03-30 16:01:33 624
原创 深度学习中一些常见的问题
2. **更高效的计算:** 虽然处理更多的样本会增加每次迭代的计算负担,但相对于每个样本的梯度计算,整体计算效率更高。在每次迭代中,data_loader会返回一个批次的数据,其中包含了输入数据和对应的标签(如果有的话),然后可以根据需求对这些数据进行处理和训练。在神经网络中,切片操作通常用于根据给定的引导信息(如指导图像、指导特征等),从特征图或系数张量中选择相应的切片,以便进行后续的计算或处理。综上所述,较大的批量大小通常意味着更少的迭代次数,因为它们提供了更稳定的梯度估计和更高效的计算。
2024-03-24 17:28:58 1188
原创 深度学习-张量简介与创建
因此张量在数学概念中是个多维数组,但是在pytorch中张量并不只是个多维数组,他还是pytorch自动求导的一个关键。张量是一个多维矩阵,他是标量,向量,矩阵的高维拓展。以下步长为(start-end)/(steps-1)
2024-03-23 21:54:06 143
原创 深度学习-网络归一化
求均值和标准差,并通过减均值除标准差的方式,为了稳定计算,在分母中添加一个小量,避免出现分母为零的情况,与此同时我们并不希望每层样本的分布都相同,因此在通过一个线性计算进行简单的分布变化,其中的伽马和贝塔是可以学习的参数,随着训练过程自动调整。初始选择5个样本(即为批量batch大小),经过层层网络的非线性变换后每次学习到的分布都将无法预测,且在网络学习的过程中,前一层的输出值就是后一层的输入值,因此,由于参数的更新,每层输入分布都在发生变化,导致网络很难收敛。使训练过程中对学习率和参数初始化更加鲁棒。
2024-03-23 20:17:11 184
原创 深度学习-参数初始化
梯度爆炸是因为由于链式求导法则,在反向传播过程中会出现累积,如果 w 值的离散程度很高,累积就有可能出现极大值导致计算机无法存储,这就是梯度爆炸。若使用以下函数做激活函数可能会导致梯度为零而发生的梯度消失。其中的黄色字段被称为梯度值,可见这些梯度值是始终相等的。那么意味着训练过程中变化也是一样的。为了让神经网络训练过程稳定下来,我们需要将y的方差落在一个可控的范围内。
2024-03-23 18:22:15 192
原创 深度学习之激活函数
会有梯度消失现象,且导数最大值为0.25,这表示反向传播时,每层梯度会递减大概0.25。这会导致当网络层数很多或某层出现极端的输出反向传播的链式法则时会导致前几层的梯度几乎为0,参数不会更新。给定一个线性变换,不管经过多个线性变换,最终只能解决线性问题,那么这时需要在线性单元后加上一个非线性单元的函数,这类似于高中学过的神经元。relu函数没有上限,如果线性单元输出过大,或者网络是循环结构这就可能会导致梯度累计超出计算机的数值上限。非零均值函数会影响网络的收敛效果---可用输出的归一化来解决。
2024-03-23 17:49:43 513
原创 cnn卷积神经网络
可以理解为经过卷积层后学的不好把原来学的好的覆盖了,现在重新构建堆叠原始学的好的那部分,及时之前不好的部分有影响,但只要学习使得该部分权值为0即可(好的我用,不好的我权重为0,相当于白搞,也就是对我有用的我加上,没用的我也加上但是不影响,最后效果至少一定不会比原来差)特征太多了,但并不是都是有用的,因此要进行压缩(下采样),选择重要的留下了,不重要的丢弃,只会对特征图长和宽进行缩减,不会改变特征图的深度,没有涉及到矩阵的计算。3个3*3卷积层需要的参数比一个大的要参数小,实际效率更快一些。
2024-03-18 21:28:34 1329 3
原创 卷积神经网络-总结笔记
在 CNN 结构中,经多个卷积层和池化层后,连接着1个或1个以上的全连接层.与 MLP 类似,全连接层中的每个神经元与其前一层的所有神经元进行全连接.全连接层可以整合卷积层或者池化层中具有类别区分性的局部信息.为了提升 CNN 网络性能,全连接层每个神经元的激活函数(按你的任务目的选择,分类or回归)。边缘填充:在这里还要注意一点,即zero pad项,即为图像加上一个边界,边界元素均为0,这就叫做边缘填充,是为了更好的提取边界的每个部分的特征,让边界点也可以多次的提取特征,这就是padding的作用。
2024-03-18 21:12:48 1803
原创 卷积神经网络--感受野
感受野是指当下结果能感受到前一层是多大,进而感受前一层的前一层是多大,若只做两层,则可以感觉到当前感受野为5*5的。最后这个值是由前面多少个原始输入数据中多少个值参与计算得到的。但若这个值是通过整体,在既有干扰又有背景又有前景又有主体因素经过各种各样筛选组合得到的值还不错,所以若是局限则感受不好,因此一般情况下感受野越大越好。堆叠3个3*3卷积层是经过三次卷积,7->5->3->1,一个7*7卷积核经过一次卷积,7->1。若现在做特征提取,这个值若仅仅代表一个小区域,是否会有些局限。
2024-03-18 21:10:43 387
原创 卷积神经网络-Resnet网络
Resnet网络和Vgg相比通俗来说有保底,就是说如果在卷积的过程中,发现卷积效果不是很好(lose一直在上升),那么神经网络会所有的权值参数将置为0,在加上卷积前的x则得出的结果只会比开始的高。一个问题它是分类还是回归,决定于其损失函数和最后的层是如何连接的,故将其理解为用于特征提取的一种网络较好。经典的层数:50多层,101层。
2024-03-18 20:39:33 355
原创 卷积神经网络 经典网络-Vgg
该网络卷积核均为3*3的矩阵,每次池化以后,Vgg便通过添加特征图个数来弥补长宽上缺失的特征。且虽然他的效率比原始神经网络要好15%左右,但是在训练时间上,Vgg训练时间大概以天为单位,且对于此网络,当层数达到16时,它比预想中的30层效果要好得多,这并不太符合我们理解的深度学习(越深效果越好),而是因为每一次在上一次的特征前提下提取,得到的结果,并不一定比上一次更好。
2024-03-18 20:17:16 342
原创 卷积神经网络-整体网络架构学习
最后得到32*32*10的特征图后,在全连接操作之前,还需要一个拉长操作,将一个三维的特征图拉长为一个特征向量,即将10240个特征转换为5个类别的概率值。只有带参数的东西才能称之为1层,故以上六层卷积层加上1层全连接层,为7层神经网络。我们发现每次卷积过后都搭配着ReLU激活函数,(关于ReLU函数,详见。
2024-03-18 20:01:53 373
原创 卷积神经网络的池化层学习
最大池化选择的都是该区域内最大的值,因为参数越大,代表特征越明显,越重要,基本只要最好的特征,因此使用max pooling较多。且池化层中不涉及到任何矩阵的运算。池化层简而言之就是做压缩的,
2024-03-18 18:28:30 457
原创 鸿蒙开发-第三方库axios
其中params用于get请求操作,最后会将其拼接为字符串放到网址后面。用axios比直接用http更加方便快捷,省去了不少麻烦。data用于post请求操作,对象,放到请求中去。使用axios发送请求实例。
2024-01-30 00:43:21 694 1
原创 鸿蒙开发-http请求数据
异步的函数无法进行同步传递,故再此创建一个promise对象进行异步的返回。并不将其进行直接返回,而是通过resolve()函数进行告知。失败时返回reject,成功时返回resolve。进行实例化对象,并将其暴露,使其他组件可以使用。2.使用http模块发送请求,处理响应。请求模块过程中的数组foreach遍历。使用ts文件用来编写类。在引用组件处导入并使用。1.导入http模块。
2024-01-29 23:51:55 542
原创 鸿蒙开发-页面及组件生命周期
aboutToAppear()用于对于一些数据的初始化,初始化后便可以在build函数中使用这些数据。页面的生命周期钩子:(仅能在加了@Entry的入口组件中使用,普通自定义组件中不能使用)aboutToDisappear()用于数据持久化,数据保存的操作。
2024-01-29 22:50:36 772
原创 鸿蒙开发-UIAbility生命周期
经过几个阶段:应用刚刚启动时,对应的Ability会被创建,随后其对应的windowStage也会被创建,此时应用会被切换到前台,同时对应的窗口也会被展示出来,接着会加载窗口里面的页面,页面加载完后,可以看到页面的内容,便可以去做各种操作了。操作过程中,要注意,如果如果我们在访问页面的一些功能时,这个功能不属于当前ability,那么会触发其他ability的create,然后其他ability的windowStage也会被create,那么其他的ability会被切到前台,我们的应用则会被切到后台。
2024-01-29 20:14:56 518
原创 鸿蒙开发-组件转场动画
组件转场动画是在组件插入或移除时的过渡动画,通过组件的transition属性来配置。rotate:一般只填写angle(旋转度数)type用于描述入场和出场动画,即新增与删除。转场动画通过使用animateTo结合实现。
2024-01-29 18:25:16 431
原创 鸿蒙开发-动画
属性动画:通过设置组件的animation属性来给组件添加动画,当组件的width,height,Opacity,backgroundColor,scale,rotate,translate等属性变更时,可以实现渐变过度的效果。且最好将animation放到最后,不然不会有效果。显式动画是通过全局animateTo函数来修改组件属性,实现属性变化时的渐变过渡效果。其中animateTo方式更加灵活,使用的更多。属性动画,显示动画。
2024-01-29 16:20:06 704
原创 鸿蒙开发-页面路由
第三个参数为一个回调函数:返回异常信息:如错误码:100001:内部错误,可能是渲染失败,100002:路由地址错误,100003:路由栈中页面超过32。pushUrl有三大参数,其中第一个参数为一个对象为路由可选字段:url(目标页面路径),params(传递的参数(可选))router.pushUrl():目标页不会替换当前页,而是压入页面栈,因此可以使用router.back()返回当前页。Single:单实例模式,如果目标页已经在栈中,则离栈顶最近的同Url页面会被移动到栈顶并重新加载。
2024-01-29 14:18:14 476
原创 鸿蒙开发-状态管理
Observed当嵌套对象与自身相同时,不需要在内部添加,若不同,有多少嵌套对象就在嵌套对象外部处加多少@Observed。内部变量添加@ObjectLink注释。使用了@ObjectLink,将new Person()的内部嵌套对象作为一个参数传入到另一组件中,组件将其作为变量,为其添加@ObjectLink。@ObjectLink和@Observed装饰器用于在涉及嵌套对象或数组元素为对象的场景中进行双向数据同步。数组的嵌套状态管理模式。
2024-01-29 13:01:33 348
原创 鸿蒙开发-状态管理
prop用于数据同步的绑定类似于v-bind的单向数据流,而@Link用于数据同步的绑定类似于v-model双向数据流。当父和子均修改时使用Link,即儿子A传给父亲,而父亲需要将其传递给儿子B,此时便需要双向绑定使用$做引用进行传递。多数情况使用prop与link,虽然provide和consume可以省略很多东西,不用传参(因为其内部会自动进行传参),但在一定程度上会影响性能。即父和子相互影响使用link,单项影响用prop,不影响用state。
2024-01-28 22:34:04 370
原创 鸿蒙开发-状态管理
有如对象中嵌套对象,对象中的对象的属性进行修改时,页面不重新加载,同理在对被嵌套的对象和非嵌套的对象进行同时渲染时,页面才发生改变。如数组中的某一对象的某一属性发生改变时,虽然数值发生了改变,但是页面不进行重新加载,仅当进行覆盖,添加,删除时,才进行重新加载。@state支持object,class,string,number,boolean,enum类型以及这些类型的数组。状态(state):指驱动视图更新的数据(被装饰器标记的变量)@state装饰器标记的变量必须初始化,不能为空值。
2024-01-28 18:11:45 359
原创 鸿蒙开发-自定义组件
自定义组件通常定义在文件成为一个单独的页面然后使用import导入,而组件那没有@entry,且要使用export将其进行暴露,在引入时需要哪些参数就传哪些参数,不需要则不用传参。自定义函数通常定义在同一文件中(即当前页面),使用@Builder,可全局也可局部,局部时不使用function关键字,在使用时使用this.来调用。用法类似于上部分自定义函数(注意提取出来的style样式必须是所有组件可用的公共通用属性)若使用组件特有的属性,则定义在全局上使用@Extend关键字,用来继承该特有组件的名字。
2024-01-28 16:04:22 503
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人