监督学习、半监督学习、无监督学习、自监督学习、强化学习和对比学习

news2024/11/25 15:10:09

目录

一、监督学习

二、半监督学习

三、无监督学习

3.1.聚类算法

3.2.降维算法

3.3.异常检测

3.4.自动编码器

3.5.生成模型

3.6.关联规则学习

3.7.自组织映射(SOM)

四、自监督学习

4.1. 基于上下文(Context based)

4.2. 基于时序(Temporal Based)

4.3. 基于对比(Contrastive Based)

五、强化学习

六、对比学习

6.1 Momentum Contrast 

6.2 SimCLR


本文为阶段性总结,挑重点阅读即可!

一、监督学习

监督学习最大的特点就是其数据集带有标签。换句话来说,监督学习就是在带有标签的训练数据中学习模型,然后对某个给定的新数据利用模型预测它的标签。具体点来说,该数据集中的标签就像是作业的标准答案,而我们预测的标签则是我们给出的答案。如果我们的答案和标准答案不同,老师和父母就会来纠正,我们会进行学习,对题目的理解就会加深,正确率就会越来越高。

常见算法:分类算法(KNN、朴素贝叶斯、SVM、决策树、随机森林、BP神经网络算法等)和回归算法(逻辑回归、线性回归等)。

应用场景:分类和回归的场景,如垃圾邮件分类、心脏病预测等。

二、半监督学习

让学习器不依赖外界交互、自动地利用未标记样本来提升学习性能,就是半监督学习。

在许多实际应用中,很容易找到海量的无类标签的样例,但需要使用特殊设备或经过昂贵且用时非常长的实验过程进行人工标记才能得到有类标签的样本,由此产生了极少量的有类标签的样本和过剩的无类标签的样例。因此,人们尝试将大量的无类标签的样例加入到有限的有类标签的样本中一起训练来进行学习,期望能对学习性能起到改进的作用,由此产生了半监督学习(Semi-supervised Learning),如如图1所示。半监督学习(Semi-supervised Learning)避免了数据和资源的浪费,同时解决了监督学习(Supervised Learning)的 模型泛化能力不强和无监督学习(Unsupervised learning)的模型不精确等问题。

半监督学习可进一步划分为纯(pure)半监督学习和直推学习(transductive learning),前者假定训练数据中的未标记样本并非待测的数据,而后者则假定学习过程中所考虑的未标记样本恰是待预测数据,学习的目的就是在这些未标记样本上获得最优泛化性能。

一般来说,半监督学习算法可分为:self-training(自训练算法)、Graph-based Semi-supervised Learning(基于图的半监督算法)、Semi-supervised supported vector machine(半监督支持向量机,S3VM)。简单介绍如下:

1.简单自训练(simple self-training):用有标签数据训练一个分类器,然后用这个分类器对无标签数据进行分类,这样就会产生伪标签(pseudo label)或软标签(soft label),挑选你认为分类正确的无标签样本(此处应该有一个挑选准则),把选出来的无标签样本用来训练分类器。

2.协同训练(co-training):其实也是 self-training 的一种,但其思想是好的。假设每个数据可以从不同的角度(view)进行分类,不同角度可以训练出不同的分类器,然后用这些从不同角度训练出来的分类器对无标签样本进行分类,再选出认为可信的无标签样本加入训练集中。由于这些分类器从不同角度训练出来的,可以形成一种互补,而提高分类精度;就如同从不同角度可以更好地理解事物一样。

3.半监督字典学习:其实也是 self-training 的一种,先是用有标签数据作为字典,对无标签数据进行分类,挑选出你认为分类正确的无标签样本,加入字典中(此时的字典就变成了半监督字典了)

4.标签传播算法(Label Propagation Algorithm):是一种基于图的半监督算法,通过构造图结构(数据点为顶点,点之间的相似性为边)来寻找训练数据中有标签数据和无标签数据的关系。是的,只是训练数据中,这是一种直推式的半监督算法,即只对训练集中的无标签数据进行分类,这其实感觉很像一个有监督分类算法...,但其实并不是,因为其标签传播的过程,会流经无标签数据,即有些无标签数据的标签的信息,是从另一些无标签数据中流过来的,这就用到了无标签数据之间的联系

5.半监督支持向量机:监督支持向量机是利用了结构风险最小化来分类的,半监督支持向量机还用上了无标签数据的空间分布信息,即决策超平面应该与无标签数据的分布一致(应该经过无标签数据密度低的地方)(这其实是一种假设,不满足的话这种无标签数据的空间分布信息会误导决策超平面,导致性能比只用有标签数据时还差)

应用场景:一些标记数据比较难获取的场景。

三、无监督学习

无监督学习的特点是,模型学习的数据没有标签,因此无监督学习的目标是通过对这些无标签样本的学习来揭示数据的内在特性及规律,其代表就是聚类。与监督学习相比,监督学习是按照给定的标准进行学习(这里的标准指标签),而无监督学习则是按照数据的相对标准进行学习(数据之间存在差异)。以分类为例,小时候你在区分猫和狗的时候,别人和你说,这是猫,那是狗,最终你遇到猫或狗你都能区别出来(而且知道它是猫还是狗),这是监督学习的结果。但如果小时候没人教你区别猫和狗,不过你发现猫和狗之间存在差异,应该是两种动物(虽然能区分但不知道猫和狗的概念),这是无监督学习的结果。其典型算法包括:

3.1.聚类算法

该算法用于根据样本的相似性将样本分组到集群中。聚类的目标是将数据分成几组,使得每组中的示例彼此之间的相似性高于其他组中的示例。

有许多聚类方法,包括基于质心的方法、基于密度的方法和分层方法。基于质心的方法,例如k-means,将数据划分为K个簇,其中每个簇由质心定义(即,代表性示例)。基于密度的方法,例如DBSCAN,根据示例的密度将数据划分为聚类。层次方法,例如凝聚聚类,构建了一个层次结构的聚类,其中每个示例最初被认为是它自己的聚类,然后聚类根据它们的相似性合并在一起。

3.2.降维算法

降维算法用于减少数据集中的特征数量,同时保留尽可能多的信息。机器学习中经常使用降维来提高学习算法的性能,因为它可以降低数据的复杂性并防止过度拟合。它对于数据可视化也很有用,因为它可以将维度的数量减少到更易于管理的大小,从而允许在较低维度的空间中绘制数据。

降维的方法有很多,包括线性方法和非线性方法。线性方法包括诸如主成分分析(PCA)和线性判别分析(LDA)之类的技术,这些技术可以找到捕获数据中最大方差的特征的线性组合。非线性方法包括t-SNE和ISOMAP等技术,它们保留了数据的局部结构。

除了线性和非线性方法之外,还有特征选择方法(选择最重要特征的子集)和特征提取方法(将数据转换到维度更少的新空间)。

3.3.异常检测

这是一种无监督学习,涉及识别与其余数据相比不寻常或意外的示例。异常检测算法通常用于欺诈检测或识别故障设备。异常检测有很多方法,包括统计方法、基于距离的方法和基于密度的方法。统计方法涉及计算数据的统计特性,例如均值和标准差,以及识别超出特定范围的示例。基于距离的方法涉及计算示例与大部分数据之间的距离,并识别距离太远的示例。基于密度的方法涉及识别数据低密度区域中的示例

3.4.自动编码器

自动编码器是一种用于降维的神经网络。它的工作原理是将输入数据编码为低维表示,然后将其解码回原始空间。自动编码器通常用于数据压缩、去噪和异常检测等任务。它们对于高维且具有大量特征的数据集特别有用,因为它们可以学习捕获最重要特征的数据的低维表示。

3.5.生成模型

这些算法用于学习数据的分布并生成与训练数据相似的新示例。一些流行的生成模型包括生成对抗网络(GAN)和变分自动编码器(VAE)。生成模型有很多应用,包括数据生成、图像生成和语言建模。它们还用于风格转换和图像超分辨率等任务。

3.6.关联规则学习

该算法用于发现数据集中变量之间的关系。它通常用于购物车分析,以识别经常购买的商品。一种流行的关联规则学习算法是Apriori算法。

3.7.自组织映射(SOM)

自组织映射(SOM)是一种用于可视化和特征学习的神经网络架构。它们是一种无监督学习算法,可用于发现高维数据中的结构。SOM通常用于数据可视化、聚类和异常检测等任务。它们对于可视化二维空间中的高维数据特别有用,因为它们可以揭示原始数据中可能不明显的模式和关系。

应用场景:聚类场景,如聚合新闻网站。 

四、自监督学习

自监督学习主要是利用辅助任务(pretext)从大规模的无监督数据中挖掘自身的监督信息,通过这种构造的监督信息对网络进行训练,从而可以学习到对下游任务有价值的表征。
也就是说,自监督学习不需要任何的外部标记数据,这些标签是从输入数据自身中得到的。自监督学习的模式仍然是Pretrain-Fintune的模式,即先在pretext上进行预训练,然后将学习到的参数迁移到下游任务网络中,进行微调得到最终的网络。
自监督学习的方法主要可以分为 3 类:

4.1. 基于上下文(Context based)

基于数据自身的上下文信息可以构造很多任务。以拼图的方式构造pretext,比如将一张图分成9个部分,通过预测这几个部分的相对位置来产生损失;以抠图的方式构造pretext,随机将图片的一部分删掉,用剩余的部分预测扣掉的部分;预测图片的颜色,比如输入图像的灰度图,预测图片的色彩。

论文一:《S4L: Self-Supervised Semi-Supervised Learning》

自监督和半监督学习(大量数据没有标签,少量数据有标签)也可以进行结合,对于无标记的数据进行自监督学习(旋转预测),和对于有标记数据,在进行自监督学习的同时利用联合训练的想法进行有监督学习。通过对 imagenet 的半监督划分,利用 10% 或者 1% 的数据进行实验,最后分析了一些超参数对于最终性能的影响。

对于标记数据来说,模型会同时预测旋转角度和标签,对于无标签数据来说,只会预测其旋转角度,预测旋转角度”可以替换成任何其它无监督task(作者提出了两个算法,一个是 S^4L-Rotation,即无监督损失是旋转预测任务;另一个是S^4L-Exemplar,即无监督损失是基于图像变换(裁切、镜像、颜色变换等)的triplet损失)

总的来说,需要借助于无监督学习,为无标注数据创建一个pretext task,这个pretext task能够使得模型利用大量无标注学习一个好的feature representation

4.2. 基于时序(Temporal Based)

样本间其实也是具有很多约束关系的,这里我们来介绍利用时序约束来进行自监督学习的方法。最能体现时序的数据类型就是视频了(video)。

论文二:《Time-Contrastive Networks: Self-Supervised Learning from Video》

第一种思想是基于帧的相似性,对于视频中的每一帧,其实存在着特征相似的概念,简单来说我们可以认为视频中的相邻帧特征是相似的,而相隔较远的视频帧是不相似的,通过构建这种相似(position)和不相似(negative)的样本来进行自监督约束。【如下图所示】

 另外,对于同一个物体的拍摄是可能存在多个视角(multi-view),对于多个视角中的同一帧,可以认为特征是相似的,对于不同帧可以认为是不相似的。【如下图所示】

 论文三:《Unsupervised Learning of Visual Representations Using Videos》

还有一种想法是来自 ICCV 2015 Unsupervised Learning of Visual Representations Using Videos的基于无监督追踪方法,首先在大量的无标签视频中进行无监督追踪,获取大量的物体追踪框。那么对于一个物体追踪框在不同帧的特征应该是相似的(positive),而对于不同物体的追踪框中的特征应该是不相似的(negative)。

 

论文四:《Shuffle and Learn:unsupervised learning using temporal order verification》

除了基于特征相似性外,视频的先后顺序也是一种自监督信息。比如ECCV 2016, Misra, I. Shuffle and Learn:unsupervised learning using temporal order verification等人提出基于顺序约束的方法,可以从视频中采样出正确的视频序列和不正确的视频序列,构造成正负样本对然后进行训练。简而言之,就是设计一个模型,来判断当前的视频序列是否是正确的顺序。

4.3. 基于对比(Contrastive Based)

通过学习对两个事物的相似或不相似进行编码来构建表征,即通过构建正负样本,然后度量正负样本的距离来实现自监督学习。核心思想样本和正样本之间的相似度远远大于样本和负样本之间的相似度。

论文五:《Representation Learning with Contrastive Predictive Coding》

我们引入 ICLR 2019 的 DIM,DIM 的具体思想是对于隐层的表达,我们可以拥有全局的特征(编码器最终的输出)和局部特征(编码器中间层的特征),模型需要分类全局特征和局部特征是否来自同一图像。所以这里 x 是来自一幅图像的全局特征,正样本是该图像的局部特征,而负样本是其他图像的局部特征。这个工作的开创性很强,已经被应用到了其他领域,比如 graph 。

CPC是一个基于对比约束的自监督框架,可以适用于文本、语音、视频、图像等任何形式数据的对比方法(图像可以看作为由像素或者图像块组成的序列)。

CPC通过对多个时间点共享的信息进行编码来学习特征表达,同时丢弃局部信息。这些特征被称为“慢特征”:随时间不会快速变化的特征。比如说:视频中讲话者的身份,视频中的活动,图像中的对象等。

CPC 主要是利用自回归的想法,对相隔多个时间步长的数据点之间共享的信息进行编码来学习表示,这个表示 c_t 可以代表融合了过去的信息,而正样本就是这段序列 t 时刻后的输入,负样本是从其他序列中随机采样出的样本。CPC的主要思想就是基于过去的信息预测的未来数据,通过采样的方式进行训练。

应用场景:语义分割、目标检测、图像分类和人体动作识别等

五、强化学习

强化学习(Reinforcement learning,RL)讨论的问题是一个智能体(agent) 怎么在一个复杂不确定的 环境(environment) 里面去极大化它能获得的奖励。通过感知所处环境的 状态(state) 对 动作(action) 的 反应(reward), 来指导更好的动作,从而获得最大的 收益(return),这被称为在交互中学习,这样的学习方法就被称作强化学习。

在强化学习过程中,智能体跟环境一直在交互。智能体在环境里面获取到状态,智能体会利用这个状态输出一个动作,一个决策。然后这个决策会放到环境之中去,环境会根据智能体采取的决策,输出下一个状态以及当前的这个决策得到的奖励。智能体的目的就是为了尽可能多地从环境中获取奖励。

强化学习主要有以下几个特点:

1.试错学习:强化学习一般没有直接的指导信息,Agent 要以不断与 Environment 进行交互,通过试错的方式来获得最佳策略(Policy)。

2.延迟回报:强化学习的指导信息很少,而且往往是在事后(最后一个状态(State))才给出的。比如 围棋中只有到了最后才能知道胜负。

 

1.环境(Environment) 是一个外部系统,智能体处于这个系统中,能够感知到这个系统并且能够基于感知到的状态做出一定的行动。

2.智能体(Agent) 是一个嵌入到环境中的系统,能够通过采取行动来改变环境的状态。

3.状态(State)/观察值(Observation):状态是对世界的完整描述,不会隐藏世界的信息。观测是对状态的部分描述,可能会遗漏一些信息。

4.动作(Action):不同的环境允许不同种类的动作,在给定的环境中,有效动作的集合经常被称为动作空间(action space),包括离散动作空间(discrete action spaces)和连续动作空间(continuous action spaces),例如,走迷宫机器人如果只有东南西北这 4 种移动方式,则其为离散动作空间;如果机器人向 360◦ 中的任意角度都可以移动,则为连续动作空间。

5.奖励(Reward):是由环境给的一个标量的反馈信号(scalar feedback signal),这个信号显示了智能体在某一步采 取了某个策略的表现如何。

常见算法:隐马尔科夫、蒙特卡罗。

应用场景:针对流程中需要不断推理的场景,如无人汽车驾驶、阿尔法狗下围棋等。

六、对比学习

基本思想是提供一组负样本和正样本。损失函数的目标是找到表示以最小化正样本之间的距离,同时最大化负样本之间的距离。图像被编码后的距离可以通过点积计算,这正是我们想要的!那么这是否意味着计算机视觉中的 SSL 现在已经解决了?其实还没有完全解决。

为什么这么说呢?因为图像是非常高维的对象,在高维度下遍历所有的负样本对象是几乎不可能的,即使可以也会非常低效,所以就衍生出了下面的方法。

在描述这方法之前,让我们首先来讨论对比损失这将会帮助我们理解下面提到的算法。我们可以将对比学习看作字典查找任务。想象一个图像/块被编码(查询),然后与一组随机(负 - 原始图像以外的任何其他图像)样本+几个正(原始图像的增强视图)样本进行匹配。这个样本组可以被视为一个字典(每个样本称为一个键)。假设只有一个正例,这意味着查询将很好地匹配其中一个键。这样对比学习就可以被认为是减少查询与其兼容键之间的距离,同时增加与其他键的距离。

目前对比学习中两个关键算法如下:

6.1 Momentum Contrast 

MoCo是由Kaiming He的团队发表在CVPR2020的工作,MoCo通过对比学习的方法,将无监督学习在ImageNet的分类的效果超过有监督学习的性能。MoCo关注的重点是样本数量对学习到的质量的影响。MoCo使用的正负样例生成方法中,正样本生成方法:随机裁剪,生成两个区域,同一张图片的两个区域是正样本,不同图片的两个区域是负样本,即判断两个区域是否为同一张图片。首先介绍简单的end-to-end模型结构,如下图:

定义 q 、 k 分别为正负样本的key, xq 和 xk 分别为正负样本,end-to-end模型可以使用同一个 encoder或两个encoder来编码xq和xk , 然后通过内积计算 Loss。 需要注意的是, 在end-to-end 模型中, dictionary size即为mini-batch size, 每个batch内的负样本也会对 Loss 产生贡献,反 向传播过程中会有梯度回传给需要学习的encoder函数 f(), 因此在实现的时候,负样本数量必然 会受到batch_size大小的限制,从而限制影响模型的性能。针对这个问题,作者介绍了Memory Bank和MoCo模型, 结构如下图所示: 

Memory Bank模型解耦合dictionary size与mini-batch size,即负样本不在每个batch中进行选取,而是在所有样本的特征组成的bank中进行采样,通过随机采样,一定程度上可以认为一个query采样的负样本能代表所有样本,但是带来的问题是每个mini-batch的反向传播都会更新encoder参数,如果每一次更新重新encode一次所有样本,内存需求较大,如果只是更新下一次采样的k个样本,得到的表示和参数更新存在一定的滞后。而文章提出的MoCo则是融合了end-to-end和Memory Bank,并解决了之前存在的问题,添加了momentum encoder,将dictionary作为一个动态进出的队列,目标是构建一个大的且能在训练过程中保持一致性的dictionary,作者用该队列维护最近几个mini-batch中样本特征表示,并将队列作为所有样本采样的子集,对于负样例的encoder参数 θk, 采用Momentum update方法, 复制正例encoder的参数 θq, 公式为:

 总结:这个想法是要学习良好的表示,需要一个包含大量负样本的大型字典,同时保持字典键的编码器尽可能保持一致。这种方法的核心是将字典视为队列而不是静态内存库或小批量的处理。这样可以为动态字典提供丰富的负样本集,同时还将字典大小与小批量大小解耦,从而根据需要使负样本变得更大。

6.2 SimCLR

SimCLR是由Ting Chen等人发表在ICML2020的工作,与MoCo相比,SimCLR关注的重点是正负样例的构建方式,同时SimCLR还探究了非线性层在对比学习中的作用,并分析了batch_size大小、训练轮数等超参数对对比学习的影响。SimCLR模型结构图如下所示:

 

给定输入的锚点数据为 x ,首先通过数据增强(随机裁剪、颜色失真、高斯模糊等)生成正负样本对,采用ResNet50作为encoder,即函数 f() ,在编码得到表示后通过MLP将表示映射到对比学习损失的空间,目标是希望同一张图片的不同augmentation表示相近,与mini-batch中其他图片的augmentation表示较远。

作者在数据增强的步骤中通过如下方式生成:

作者实验了多种数据增强方法,最终得出结论:数据增强对对比学习效果提升有明显作用,并且多种数据增强的组合效果更好;数据增强对对比学习的提升比对有监督学习的提升高。此外,通过在得到编码表示后添加非线性变化,发现encoder编码后的 h 会保留和数据增强变换相关的信息,而非线性层的作用就是去掉这些信息,让表示回归数据的本质,提高对比学习效果。作者未使用memory bank等方法,仅通过增大batch_size至8192(使用128块TPU)及增大训练轮数等,验证得到更大的batch_size和更长的训练时间对对比学习提升的效果显著。最终SimCLR的实验效果可以达到在ImageNet上超过MoCo 7%。 

总结:SimCLR - 核心思想是使用更大的批大小(8192,以获得丰富的负样本集),更强的数据增强(裁剪,颜色失真和高斯模糊),并在相似性匹配之前嵌入的非线性变换,使用更大模型和更长的训练时间。这些都是需要反复试验的显而易见的事情,该论文凭经验表明这有助于明显的提高性能。

但是对比学习也有局限性:

1.需要大量的负样本来学习更好的表示。

2.训练需要大批量或大字典。

3.更高的维度上不能进行缩放。

4.需要某种不对称性来避免常数解。

 应用场景:人脸识别、NLP等

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/165349.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

85.【Vue-细刷-01】

Vue(一)、利用Vscode开发Vue1.在桌面创建文件夹code2.使用Vscode进行打开这个文件夹3.在Vscode的右键创建文件夹4.右键创建.html文件(二)、第一个Vue程序1.下载并引入Vue.js2.引入vue.js3.创建视图层4.创建Model层5.获取Vue实列中的数据6.效果展示⭐为什么要使用new 关键字来创…

文件操作(二):学习笔记10

目录 一.概念梳理 1.文件的分类 2.程序运行时,内存和外存数据交流的过程 二.文件缓冲区 三.常用的文件读写函数笔记 1.常用格式化文件读写函数 (1)格式化文件写入函数 用fprintf进行文件写入操作: (2)格式化文件读取函数 用fscanf进行文件读取 2…

Java枚举类与注解

目录 一、枚举类的使用 枚举类的实现 枚举类的属性 自定义枚举类 步骤 举例 使用enum定义枚举类 使用说明 举例 Enum类的主要方法 实现接口的枚举类 二、注解的使用 概述 常见的Annotation示例 自定义Annotation(参照SupressWarnings 定义&#xff09…

一不小心,登上支付宝开发者社区热文榜单Top3

大家好,我是小悟 那天中午要午休的时候,看到微信通讯录新朋友有个红色1,像俺这种有强迫症的,那不得去把它点掉。打开一看,加好友的备注是“我是熊二,支付宝开发者社区运营”。 收到支付宝社区的运营添加微…

【ROS】dynamic_reconfigure配置详细说明

文章目录 文章目录 前言 一、编写.cfg文件 二、为节点配置dynamic_reconfigure 总结 前言 dynamic_reconfigure配置是ROS中为了方便用户对程序中的参数进行实时调整而推出的工具,配置好自己的dynamic_reconfigure文件后,可以很方便的使用ROS提供的r…

2022-12-18 网工进阶(三十八)MPLS LDP---LDP基础、工作原理(会话、标签的发布和管理、特性)、配置举例

LDP概述 LDP是MPLS的一种控制协议,相当于传统网络中的信令协议,负责FEC的分类、标签的分配以及LSP的建立和维护等操作。LDP规定了标签分发过程中的各种消息以及相关处理过程。 LDP的工作过程主要分为两部分:LSR之间建立LDP会话;…

一种小型项目的超时机制方案

设计背景 在小型项目中,状态机的跳转往往依赖于某个事件的状态,因此监控某个事件是否处于超时状态就至关重要; 注意事项 超时机制应该能够准确的判断出事件是否真正超时,并预留出设置自定义超时处理的接口;超时机制…

什么是大数?大数有什么用?如何使用大数?

0 什么是大数 如果基本的整数和浮点数精度不能够满足需求,那么可以使用 javamath 包中两个很有用的类:BigInteger和 BiDecimal。 这两个类可以处理包含任意长度数字序列的数值。 BigInteger类实现任意精度的整数运算,BigDecimal实现任意精度的浮点数运算…

Android | Fragment

Android Fragment Fragment 概念 Fragment 表示应用界面中可重复的一部分,Fragment 定义和管理自己的布局,具有自己的生命周期,并且可以处理自己的输入事件。fragment 不能独立存在,而是必须由 Activity 或另一个 fragment 托管…

麦克纳姆轮(麦轮)原理

一、麦轮原理 麦克纳姆轮:简称麦轮,由轮毂和围绕轮毂的辊子组成。 辊子:没有动力的从动小滚轮。 麦克纳姆轮辊子轴线和轮毂轴线夹角是45度。 A轮(左旋)与B轮(右旋)互为镜像关系 麦轮在车上的…

Go语言开发小技巧易错点100例(五)

往期回顾: Go语言开发小技巧&易错点100例(一)Go语言开发小技巧&易错点100例(二)Go语言开发小技巧&易错点100例(三)Go语言开发小技巧&易错点100例(四) …

打工人必学的法律知识(五)——《女职工劳动保护特别规定》

女职工劳动保护特别规定https://flk.npc.gov.cn/detail2.html?ZmY4MDgwODE2ZjNjYmIzYzAxNmY0MTBmMWVkNTE0NTE (2012年4月18日国务院第200次常务会议通过 2012年4月28日中华人民共和国国务院令第619号公布 自公布之日起施行)第一条 为了减少和解决女职工…

如何减少频繁创建数据库连接的性能损耗?

为极速开发出一套某垂直领域电商系统,采用最简架构: 前端一台Web服务器运行业务代码后端一台DB服务器存储业务数据 大多系统初生时就是这样,只是随业务不但发展变得复杂,架构迭代。系统上线后,虽用户量不大&#xf…

第十三届蓝桥杯大赛软件类决赛Java大学B组C题——左移右移

【问题描述】 小蓝有一个长度为 N 的数组,初始时从左到右依次是 1, 2, 3, . . . N。 之后小蓝对这个数组进行了 M 次操作,每次操作可能是以下 2 种之一: 左移 x,即把 x 移动到最左边。右移 x,即把 x 移动到最右边。 …

数字信号处理音频FIR去噪滤波器(基于MATLAB GUI的开发完整代码+报告+课设)

1、内容简介利用MATLAB GUI设计平台,用窗函数法设计FIR数字滤波器,对所给出的含有噪声的声音信号进行数字滤波处理,得到降噪的声音信号,进行时域频域分析,同时分析不同窗函数的效果。将文件解压至一个目录下&#xff0…

ithewei的2022年度总结

窗外的雨,顺着晒衣架汇聚成豆大的珠,落到一楼庭院顶棚上,嘀嗒不停; 路上的车,由远及近,又由近及远,疾驰而过; 床边的猫,也已入睡,时不时发出一两声细微的鼾声…

面试问:@Resource 和@Autowired 的区别是什么?该怎么回答

Resource 和 Autowired 这两个注解的作用都是Spring生态里面去实现 Bean 的依赖注入 Autowired注解的作用 Autowired是Spring里面提供的一个注解,它默认是根据类型来实现Bean的依赖注入。 Autowired注解里面有一个required属性,它的默认值是true&#…

人大金仓数据库安装篇

图形化安装 规划安装路径与修改目录属主 先用root账户挂载金仓镜像包 mount -o loop /install/KingbaseES_V008R006C005B0023_Lin64_single_install.iso /mnt 切换kingbase用户来安装金仓数据库 进入挂载目录/mnt执行./setup.sh 将金仓注册为系统服务 /KingbaseES/V8/Scrip…

1592_AURIX_TC275_PMU_部分安全措施

全部学习汇总: GreyZhang/g_TC275: happy hacking for TC275! (github.com) UCB的几种状态通过寄存器的数值可以直接获取到。启动代码会识别到UCB的错误,如果识别到后悔停止继续,因此不会启动MCU。启动代码也会检查HSM是否存在以及是否需要启…

基于TensorFlow2搭建神经网络实现鸢尾花iris.txt分类

分三步:本地读取鸢尾花数据集搭建神经网络优化本地读取鸢尾花数据集读取本地数据集的两种方法读取本地数据集有两种方法:(1)利用pandas中的函数读取,并处理成神经网络需要的数据结构pd.read_csv(文件名, header第几行作…