RNN/LSTM/CNN/Transformer/Bert 面试问题

news/2024/5/2 19:00:23/文章来源:https://blog.csdn.net/qq_45893319/article/details/126536320

RNN

RNN
一文搞懂RNN(循环神经网络)基础篇
RNN梯度消失和爆炸
RNN梯度消失和爆炸的原因

  1. 为什么还要用tanh做激活函数呢?
    答:1、多用tanh函数作为激活函数,那tanh函数的导数最大也才1啊,而且又不可能所有值都取到1,那相当于还是一堆小数在累乘,还是会出现“梯度消失“,那为什么还要用它做激活函数呢?**原因是tanh函数相对于sigmoid函数来说梯度较大,收敛速度更快且引起梯度消失更慢。 tanh的导数取值为(0,1] sigmoid的导数取值为(0,1/4] **
    2、还有一个原因是sigmoid函数还有一个缺点,Sigmoid函数输出不是零中心对称。sigmoid的输出均大于0,这就使得输出不是0均值,称为偏移现象,这将导致后一层的神经元将上一层输出的非0均值的信号作为输入。关于原点对称的输入和中心对称的输出,网络会收敛地更好。tanh是关于原点对称的输入以及中心对称输出。

  2. RNN的特点本来就是能“追根溯源“利用历史数据,现在告诉我可利用的历史数据竟然是有限的,这就令人非常难受,解决“梯度消失“是非常必要的。这里说两种改善“梯度消失”的方法:
    1、选取更好的激活函数: 使用ReLU函数(不能说完全解决了“梯度消失”现象,只能说改善)。ReLU函数的左侧导数为0,右侧导数恒为1,导数中没有出现介于0到1之间的小数,连乘时就不会出现梯度乘的过程中逐渐消失的问题,这就避免了“梯度消失“的发生。但恒为1的导数容易导致“梯度爆炸“,设定合适的阈值可以解决这个问题
    2、改变传播结构: 使用LSTM

  3. 梯度消失和梯度爆炸
    梯度消失: 一句话,RNN梯度消失是因为激活函数tanh函数的倒数在0到1之间,反向传播时更新前面时刻的参数时,当参数W初始化为小于1的数,则多个(tanh函数’ * W)相乘,将导致求得的偏导极小(小于1的数连乘),从而导致梯度消失。
    梯度爆炸: 当参数初始化为足够大,使得tanh函数的倒数乘以W大于1,则将导致偏导极大(大于1的数连乘),从而导致梯度爆炸。

  4. 3.4RNN的应用场景(至少会说出三个:图片生成文字,情感分析,机器翻译)
    1对多
    1、从图像生成文字,输入为图像的特征,输出为一段句子
    2、根据图像生成语音或音乐,输入为图像特征,输出为一段语音或音乐
    多对1(最典型的就是情感分析)
    1、输出一段文字,判断其所属类别
    2、输入一个句子,判断其情感倾向
    3、输入一段视频,判断其所属类别
    多对多
    1、机器翻译,输入一种语言文本序列,输出另外一种语言的文本序列
    2、文本摘要,输入文本序列,输出这段文本序列摘要
    3、阅读理解,输入文章,输出问题答案
    4、语音识别,输入语音序列信息,输出文字序列
    原文链接:https://blog.csdn.net/qq_22613769/article/details/106927422
    RNN损失函数?
    答:交叉熵损失函数
    分类任务使用什么函数?
    答:softmax函数
    为什么会出现梯度消失?
    在使用方向传播算法来更新矩阵参数时,计算损失L对W的偏导数时,偏导数中出现了当前状态对前一状态的导数,这个导数实际计算时包含了tanh的导数与W的连乘的形式,连成分类次数与时间步相关,当tanh的导数与W乘积<1 连乘就会出现梯度消失,>1就会出现梯度爆炸。
    怎么预防梯度爆炸?
    答:使用梯度裁剪。具体是:两种梯度裁剪方法:1.确定一个范围,如果参数的梯度超过了,直接设置为固定值;2.根据若干个参数的梯度组成的向量的L2范数进行裁剪。参考:梯度剪裁
    如何防止梯度消失?
    答:1、选取更好的激活函数: 使用ReLU函数(不能说完全解决了“梯度消失”现象,只能说改善)。ReLU函数的左侧导数为0,右侧导数恒为1,导数中没有出现介于0到1之间的小数,连乘时就不会出现梯度乘的过程中逐渐消失的问题,这就避免了“梯度消失“的发生。但恒为1的导数容易导致“梯度爆炸“,设定合适的阈值可以解决这个问题。
    另外计算方便,计算速度快,可以加速网络训练。 但是,定义域负数部分恒等于零,这样会造成神经元无法激活(可通过合理设置学习率,降低发生的概率)。
      ReLU有优点也有缺点,其中的缺点可以通过其他操作取避免或者减低发生的概率,是目前使用最多的激活函数。
      
    2、改变传播结构: 使用LSTM

LSTM

参考:
RNN

公式:
在这里插入图片描述

遗忘门怎么做到“遗忘“的呢?怎么理解?
答:“遗忘“可以理解为“之前的内容记住多少“,其精髓在于遗忘门只能输出(0,1)的小数,这个数用于表示要记住多少之前的内容,这个数与之前的细胞状态Ct-1相乘,即LSTM网络经过学习决定让网络记住以前百分之多少的内容。
既然是遗忘旧的内容,为什么这个门还要接收新的xt?
答:对于这个问题就很好理解,决定记住什么遗忘什么,其中新的输入肯定要产生影响。一句话即新的输入对网络在当前时刻要记住什么遗忘什么要有影响。

下一步是确定什么样的新信息被存放在细胞状态中。
答:这里包含两个部分。第一,sigmoid 层称 “输入门层” 决定什么值我们将要更新。然后,一个 tanh 层创建一个新的候选值向量:Ct(弯)

LSTM公式的按元素乘:
答:照元素乘法其实是哈达玛积(Hadamard product),是矩阵的一种运算。哈达玛积首先保证矩阵的结构相同,把对应位置的数值相乘。参考:LSTM公式的按元素乘
为什么LSTM可以缓解梯度消失?
答:在这里插入图片描述
这个答案 无敌!参考:LSTM,GRU为什么可以缓解梯度消失问题?、也来谈谈RNN的梯度消失/爆炸问题

GRU

GRU学习总结
人人都能看懂的GRU
人人都能看懂的LSTM

CNN

Transformer

Transformer:每一位从事NLP研发的同仁都应该透彻搞明白Transformer

NLP的输入往往是一句话或者一篇文章,所以它有几个特点:
首先,输入是个一维线性序列,这个好理解;
其次,输入是不定长的,有的长有的短,而这点其实对于模型处理起来也会增加一些小麻烦;
再次,单词或者子句的相对位置关系很重要,两个单词位置互换可能导致完全不同的意思。如果你听到我对你说:“你欠我那一千万不用还了”“我欠你那一千万不用还了”,你听到后分别是什么心情?两者区别了解一下;
另外,句子中的长距离特征对于理解语义也非常关键,例子参考上图标红的单词,特征抽取器能否具备长距离特征捕获能力这一点对于解决NLP任务来说也是很关键的。

为什么RNN能够这么快在NLP流行并且占据了主导地位呢?

主要原因还是因为RNN的结构天然适配解决NLP的问题,NLP的输入往往是个不定长的线性序列句子,而RNN本身结构就是个可以接纳不定长输入的由前向后进行信息线性传导的网络结构,而在LSTM引入三个门后,对于捕获长距离特征也是非常有效的。所以RNN特别适合NLP这种线形序列应用场景,这是RNN为何在NLP界如此流行的根本原因。

RNN在新时代面临的两个严重问题:

1、在于一些后起之秀新模型的崛起,比如经过特殊改造的CNN模型,以及最近特别流行的Transformer,这些后起之秀尤其是Transformer的应用效果相比RNN来说,目前看具有明显的优势。这是个主要原因,老人如果干不过新人,又没有脱胎换骨自我革命的能力,自然要自觉或不自愿地退出历史舞台,这是自然规律。

2、RNN本身的序列依赖结构对于大规模并行计算来说相当之不友好。通俗点说,就是RNN很难具备高效的并行计算能力,工业界进行技术选型的时候,在有快得多的模型可用的前提下,是不太可能选择那么慢的模型的。一个没有实际落地应用支撑其存在价值的模型,其前景不好。

为什么RNN的并行计算能力不行呢?

T时刻的隐层状态St还依赖T-1时刻的隐层状态S(t-1)的输出,因为T时刻的计算依赖T-1时刻的隐层计算结果,而T-1时刻的计算依赖T-2时刻的隐层计算结果………这样就形成了所谓的序列依赖关系。就是说只能先把第1时间步的算完,才能算第2时间步的结果,这就造成了RNN在这个角度上是无法并行计算的,只能老老实实地按着时间步一个单词一个单词往后走。

1.Transformer 的结构是什么样的?

Transformer 本身还是一个典型的 encoder-decoder 模型,如果从模型层面来看,Transformer 实际上就像一个 seq2seq with attention 的模型。

2.Transformer 相比于 RNN/LSTM,有什么优势?为什么?

2.1 RNN 系列的模型,并行计算能力很差
RNN 系列的模型每一时刻隐层状态的计算,依赖两个输入,一个是该时刻的句子输入的单词,另一个是上一时刻隐层状态的输出。这是最能体现 RNN 本质特征的一点,RNN 的历史信息是通过这个信息传输渠道往后传输的。而 RNN 并行计算的问题就出在这里,因为每一时刻的计算依赖前一时刻的隐层计算结果,而下一时刻的计算依赖当前时刻的隐层计算结果,如此下去就形成了所谓的序列依赖关系。

Transformer的并行化我认为主要体现在self-attention模块,在Encoder端Transformer可以并行处理整个序列,并得到整个输入序列经过Encoder端的输出,在self-attention模块,对于某个序列x1, x2, …, xn,self-attention模块可以直接计算 xi,xj 的点乘结果,而RNN系列的模型就必须按照顺序从x1计算到xn 。

2.2 Transformer 的特征抽取能力比 RNN 系列的模型要好
特征抽取能力比 RNN 系列的模型要好,上述结论是通过一些主流的实验来说明的,并不是严格的理论证明,具体实验对比可以参见:

放弃幻想,全面拥抱 Transformer:自然语言处理三大特征抽取器(CNN/RNN/TF)比较 该文在当时预言:
1、Bert这种两阶段的模式(预训练+Finetuning)必将成为NLP领域研究和工业应用的流行方法;
2、从NLP领域的特征抽取器角度来说,Transformer会逐步取代RNN成为最主流的的特征抽取器。

对自注意力机制的理解

下列句子是我们想要翻译的输入句子:

The animal didn’t cross the street because it was too tired

这个“it”在这个句子是指什么呢?它指的是street还是这个animal呢?这对于人类来说是一个简单的问题,但是对于算法则不是。

当模型处理这个单词“it”的时候,自注意力机制会允许“it”与“animal”建立联系。

随着模型处理输入序列的每个单词,自注意力会关注整个输入序列的所有单词,帮助模型对本单词更好地进行编码。

如果你熟悉RNN(循环神经网络),回忆一下它是如何维持隐藏层的。RNN会将它已经处理过的前面的所有单词/向量的表示与它正在处理的当前单词/向量结合起来。而自注意力机制会将所有相关单词的理解融入到我们正在处理的单词中。
原文链接:https://blog.csdn.net/longxinchen_ml/article/details/86533005

Transformer的缺点?

Transformer作为一个新模型,并不是完美无缺的。它也有明显的缺点:
1、首先,对于长输入的任务,典型的比如篇章级别的任务(例如文本摘要),因为任务的输入太长,Transformer会有巨大的计算复杂度,导致速度会急剧变慢。
2、除了这个缺点,Transformer整体结构确实显得复杂了一些,如何更深刻认识它的作用机理,然后进一步简化它,这也是一个好的探索方向。

2、Transformer的点积模型做缩放的原因是什么?多头注意力机制在进行softmax之前需要对attention进行scaled(为什么除以d_k的平方根)?

答:前向传播角度:如果不除以根号dk,会造成马太效应,在经过softmax求注意力得分的时候,小的值变得更小,大的值会更大,缩放以后注意力值会分散一点。
为什么是dk的角度:可以将数据转为标准正态分布
方向传播角度:不除以dk的话,注意力得分是一个很大的分值,softmax在反向传播的时候容易造成梯度消失。
除以 dk 后可以让 attention 的权重分布方差为 1,否则会由于某个输入太大的话就会使得权重太接近于1(softmax 正向接近 1 的部分),梯度很小,造成参数更新困难。

3、BatchNomlization和LayerNomlization的区别

相同点:BN和LN,顾名思义就是对数据做归一化处理——也就是对数据以某个角度或者层面做0均值1方差的处理。
异同点:

4. Transformer 中为何使用Layer Norm 而不是 Batch Norm?

答:BatchNomlization是在特征上计算均值和方差,然后在特征上进行归一化。LayerNomlization是以样本为单位,计算均值与方差,最后归一化。

BN是对不同batch内样本的同一个特征进行归一化,例如有身高体重和年龄三个特征。
在这里插入图片描述
是一种“列缩放”。BN能够解决梯度弥散。通过将输出进行适当的缩放,可以缓解梯度消失的状况。

拿sigmoid激活函数距离,从图中,我们很容易知道,数据值越靠近0梯度越大,越远离0梯度越接近0,我们通过BN改变数据分布到0附近,从而解决梯度消失问题。

在这里插入图片描述
Batch Normalization 的处理对象是对一批样本, Layer Normalization 的处理对象是单个样本。Batch Normalization 是对这批样本的同一维度特征做归一化, Layer Normalization 是对这单个样本的所有维度特征做归一化。
BN、LN可以看作横向和纵向的区别。
经过归一化再输入激活函数,得到的值大部分会落入非线性函数的线性区,导数远离导数饱和区,避免了梯度消失,这样来加速训练收敛过程。
BatchNorm这类归一化技术,目的就是让每一层的分布稳定下来,让后面的层可以在前面层的基础上安心学习知识。

BatchNorm就是通过对batch size这个维度归一化来让分布稳定下来。LayerNorm则是通过对Hidden size这个维度归一。

参考:batchNormalization与layerNormalization的区别

4、为啥BN不适合NLP?

BN 感觉是对样本内部特征的缩放,LN 是样本直接之间所有特征的缩放。为啥BN不适合NLP 是因为NLP模型训练里的每次输入的句子都是多个句子,并且长度不一,那么 针对每一句的缩放才更加合理,才能表达每个句子之间代表不同的语义表示,这样让模型更加能捕捉句子之间的上下语义关系。如果要用BN,它首先要面临的长度不一的问题。有时候batch size 越小的bn 效果更不好。

1. 为什么要加feed-forward network (会让简单写下实现)

5、multi-head attention 的multi-head作用是什么(为什么不能用 1-head )? 4、为什么Transformer 要做 Multi-head Attention? 它的好处在哪?8. 什么是Transformer的多头注意力机制?

在训练之后,每个集合都被用来将输入词嵌入(或来自较低编码器/解码器的向量)投影到不同的表示子空间中。
(1)多头的注意力有助于网络捕捉到更丰富的特征 / 信息。

Multi-head attention allows the model to jointly attend to information from different representation subspaces at different positions. With a single attention head, averaging inhibits this.

多头注意力允许模型在不同位置共同关注来自不同表示子空间的信息。使用一个单注意力头,平均会抑制这种情况。

(2)在这篇论文中 http://arxiv.org/pdf/1905.0941 讨论了多头的作用,发现并不是头越多越好,去掉一些头效果依然有不错的效果(而且效果下降可能是因为参数量下降),这是因为在头足够的情况下,这些头已经能够有关注位置信息、关注语法信息、关注罕见词的能力了,再多一些头,无非是一种 enhance 或 noise 而已。
答案参考:Transformer中Multi-head Attention的作用

但是有大量的paper表明,Transformer,或Bert的特定层是有独特的功能的,底层更偏向于关注语法,顶层更偏向于关注语义。

论文中说到这样的好处是可以允许模型在不同的表示子空间里学习到相关的信息

2. Transformer的encoder和decoder有什么区别?

5、Transformer的Encoder端和Decoder端是如何进行交互的?和一般的seq2seq有什么差别?

3. Transformer 的 Positional Encoding 是如何表达相对位置关系的?

6、Transformer中multi-head attention中每个head为什么要进行降维?[14]

7. Transformer的 Layer Normalization是怎么样做的?

为什么需要mask?

  1. 在计算attention score的时候如何对padding做mask操作?
  2. Transformer解决的是什么问题,相较seq2seq有什么优势?
  3. 序列的顺序?
    答:使用位置编码表示序列的顺序
    将位置向量添加到词嵌入中使得它们在接下来的运算中,能够更好地表达的词与词之间的距离。
    使用正弦 余弦函数对单词位置关系进行编码的方式,这不是唯一可能的位置编码方法。它的优点是能够扩展到未知的序列长度(例如,当我们训练出的模型需要翻译远比训练集里的句子更长的句子时)。

Bert

💡作为延伸,Transformer肯定会提到NLP中如Bert等的经典模型,会有如下问题:

  1. Bert是基于Transformer结构的,做了什么针对性的改动?

  2. Bert训练时的任务是什么?

  3. Bert和GPT有什么区别与联系

3、Transformer中是怎么做multi head attention 的,这样做multi head attention,会增加它的时间复杂度嘛?

1、Transformer在哪里做了权重共享,为什么可以做权重共享?好处是什么?[1]

参考:
1、放弃幻想,全面拥抱Transformer:自然语言处理三大特征抽取器(CNN/RNN/TF)比较
2、从Word Embedding到Bert模型—自然语言处理中的预训练技术发展史

word2vec的缺点:

答:无法解决一词多义现象

关于Transformer 的一些闲聊

但是值得注意的是,并不是说 Transformer 就能够完全替代 RNN 系列的模型了,任何模型都有其适用范围,同样的,RNN 系列模型在很多任务上还是首选,熟悉各种模型的内部原理,知其然且知其所以然,才能遇到新任务时,快速分析这时候该用什么样的模型,该怎么做好。

我们针对NLP任务的特点来说下Transformer的对应解决方案。首先,自然语言一般是个不定长的句子,那么这个不定长问题怎么解决呢?Transformer做法跟CNN是类似的,一般设定输入的最大长度,如果句子没那么长,则用Padding填充,这样整个模型输入起码看起来是定长的了。

另外,NLP句子中单词之间的相对位置是包含很多信息的,上面提过,RNN因为结构就是线性序列的,所以天然会将位置信息编码进模型;而CNN的卷积层其实也是保留了位置相对信息的,所以什么也不做问题也不大。但是对于Transformer来说,为了能够保留输入句子单词之间的相对位置信息,必须要做点什么。

为啥它必须要做点什么呢?因为输入的第一层网络是Muli-head self attention层,我们知道,Self attention会让当前输入单词和句子中任意单词发生关系,然后集成到一个embedding向量里,但是当所有信息到了embedding后,位置信息并没有被编码进去。所以,Transformer不像RNN或CNN,必须明确的在输入端将Positon信息编码,Transformer是用位置函数来进行位置编码的,而Bert等模型则给每个单词一个Position embedding,将单词embedding和单词对应的position embedding加起来形成单词的输入embedding。

而关于NLP句子中长距离依赖特征的问题,Self attention天然就能解决这个问题,因为在集成信息的时候,当前单词和句子中任意单词都发生了联系,所以一步到位就把这个事情做掉了。不像RNN需要通过隐层节点序列往后传,也不像CNN需要通过增加网络深度来捕获远距离特征,Transformer在这点上明显方案是相对简单直观的。说这些是为了单独介绍下Transformer是怎样解决NLP任务几个关键点的。

Transformer有两个版本:Transformer baseTransformer Big。两者结构其实是一样的,主要区别是包含的Transformer Block数量不同,Transformer base包含12个Block叠加,而Transformer Big则扩张一倍,包含24个Block。无疑Transformer Big在网络深度,参数量以及计算量相对Transformer base翻倍,所以是相对重的一个模型,但是效果也最好。

将RNN、CNN、Transformer对以下几项能力的对比:
语义特征提取能力;
长距离特征捕获能力;
任务综合特征抽取能力;
并行计算能力及运行效率

试验结果: 单从任务综合效果方面来说,Transformer明显优于CNN,CNN略微优于RNN。速度方面Transformer和CNN明显占优,RNN在这方面劣势非常明显。这两者再综合起来,如果我给的排序结果是Transformer>CNN>RNN。

RNN和CNN的大的出路在于寄生到Transformer Block里,这个原则没问题,看起来也是他俩的唯一出路。但是,要想效果足够好,在塞进去的RNN和CNN上值得花些功夫,需要一些新型的RNN和CNN模型,以此来配合Transformer的其它构件,共同发挥作用。如果走这条路,那么RNN和CNN翻身的一天也许还会到来。

尽管如此,我觉得RNN这条路仍然不好走,为什么呢,你要记得RNN并行计算能力差这个天生缺陷,即使把它塞到Transformer Block里,别说现在效果还不行,就算哪天真改出了一个效果好的,但是因为它的并行能力,会整体拖慢Transformer的运行效率。所以我综合判断RNN这条路将来也走不太通。

现状:

如果靠原生的RNN(包括LSTM,GRU以及引入Attention以及堆叠层次等各种你能想到的改进方法,可以一起上),目前很多实验已经证明效果比起Transformer有较大差距,现在看基本没有迎头赶上的可能,所以原生的RNN从效果来讲是处于明显劣势的。

其次,原生的RNN还有一个致命的问题:并行计算能力受限制太严重。想要大规模实用化应用?目前看希望渺茫。我们前面说过,决定了RNN本身的根本特质是:T时刻隐层节点对前向输入及中间计算结果的序列依赖,因为它要线形序列收集前面的信息,这是RNN之所以是RNN的最主要特点。正是它的这个根本特质,使得RNN的并行计算能力想要获得根本解决基本陷入了一个两难的境地:要么仍然保持RNN序列依赖的根本特性,这样不论怎么改造,因为这个根本还在,所以RNN依旧是RNN,所谓“我就是我,是不一样的烟火”,但是如果这样,那么其并行能力基本无法有力发挥,天花板很低;当然除此外,还有另外一条路可走,就是把这种序列依赖关系打掉,如果这样,那么这种打掉序列依赖关系的模型虽然看上去仍然保留了部分RNN整形前的样貌,其实它骨子里已经是另外一个人了,这已经不是你记忆中的RNN了。就是说,对RNN来说,要么就认命接受慢的事实,躲进小楼成一统,管他春夏与秋冬,仅仅是学术界用来发表论文的一种载体,不考虑大规模实用化的问题。要么就彻底改头换面变成另外一个人,如果真走到这一步,我想问的是:你被别人称为高效版本的RNN,你自己好意思答应吗?这就是RNN面临的两难境地。

Transformer整体结构的介绍分为哪几层?这几个Transformer问题参考我这里的总结
position embedding和word embedding为什么可以加起来,加起来的动机是什么?
Self Attention怎么做的矩阵乘法?为什么除以根号dk?softmax是对哪个维度做的?如何做的seperate head?
为什么要用Layer Norm不用Batch Norm?Batch Norm是怎么做的?你还知道哪些Norm方式?
Bagging和Boosting方式有什么区别?几个集成学习的为题参考
XGboost、LightGBM、Catboost区别在哪里?各有什么优缺点?XGBoost和传统的GBDT有什么改进?
XGBoost的正则项是什么?并行在哪里做的?
TF-IDF的设计的思想是什么?公式是什么?
word2vec的skip-gram和CBOW介绍一下,介绍负采样解决的问题,以及怎么进行负采样?word2vec ELMO GPT Bert的继承关系?参考我这个总结
LSTM公式写一下,画出门结构看一看。参考LSTm输入输出
为什么用Dropout?Dropout本质是什么?
介绍一下Target Encoding
如何构造的二阶交叉特征?
如何判断构造的二阶交叉特征是有效的还是噪声?
介绍一下DeepFM、DCN、NFM,还知道其他的排序模型么?
如何解决的样本不平衡问题?采样比是多少?
Focal loss要解决什么问题?如何解决的?写一下公式吧
ROC曲线相比于PR曲线为什么能对数据不平衡更加鲁棒?
如何解决模型欠拟合问题?如何解决模型过拟合?
为什么L1使得模型更加的稀疏?用数学推导和图示两种方法解释一下。
介绍一下FCOS目标检测模型,如何加入的Attention机制?
写一下Momentum、RMSprop、AdaGrad、Adam更新公式吧
————————————————
版权声明:本文为CSDN博主「sunlanchang」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/sunlanchang/article/details/103057442

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

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Bootstrap设计可响应式的移动网页

目录 1、设计响应式图片 1.1、使用标签&#xff08;中&#xff09; 1.2、使用css图片 2、响应式视频 3、响应式导航菜单 4、响应式表格 4.1、隐藏表格中的列 4.2 滚动表格中的列 4.3 转换表格中的列 1、设计响应式图片 1.1、使用<picture>标签&#xff08;<body…

Linux 中的which命令及C/C++代码实现

Linux which命令允许用户搜索$PATH环境变量中的路径列表&#xff0c;并输出作为参数指定的命令的完整路径。该命令通过查找与给定命令匹配的可执行文件来工作。 如果您想知道指定的程序存储在哪里&#xff0c;那么which命令可以帮助您识别路径&#xff0c;使用起来非常简单。 …

一个Python文件被多个文件同时导入会怎么样?

我们在写代码时&#xff0c;往往会遇到一个Python文件被多个文件同时导入&#xff0c;如下例所示&#xff1a; test1.py、test2.py和test3.py是3个Python文件。其中&#xff0c;test2.py导入了test1.py中的所有内容&#xff0c;test3.py导入了test1.py和test2.py中的所有内容。…

第 6 章 机器人仿真系统 1 —— 概述 + URDF 集成 Rviz 基本流程 urdf01_rviz

文章目录0 学习目标1 相关组件1.1 URDF —— 机器人建模1.2 Rviz —— 感知环境1.3 Gazebo —— 创建仿真环境2 课程说明3 URDF 集成 Rviz 基本流程3.1 创建功能包&#xff0c;导入依赖 —— 功能包 urdf01_rviz3.2 编写 URDF 文件 —— demo01_helloworld.urdf3.3 launch 文件…

读取文件报错:FileNotFoundError: [Errno 2] No such file or directory

文章目录问题描述问题分析解决办法问题描述 使用 img Image.open(data/DSC_8923.jpg) 读取一张图片时&#xff0c;报 FileNotFoundError: [Errno 2] No such file or directory: data/DSC_8923.jpg 的错误&#xff0c;如下图所示&#xff1a; 问题分析 很明显&#xff0c…

yolov5 原理解析

1、 网络结构 关于YOLOv5的网络结构其实网上相关的讲解已经有很多了。网络结构主要由以下几部分组成&#xff1a; Backbone: New CSP-Darknet53Neck: SPPF, New CSP-PANHead: YOLOv3 Head激活函数 通过和上篇博文讲的YOLOv4对比&#xff0c;其实YOLOv5在Backbone部分没太大变…

基础 | NIO - [0 复制]

INDEX1 0 复制1 0 复制演进1 示例1 0 复制 通常在进行 IO 操作时&#xff0c;涉及到 2 种复制 DMA 复制 不需要 CPU 参与&#xff0c;效率极高&#xff0c;但不可避免CPU 复制 就是 0 复制中需要消灭的复制&#xff0c;0 复制其实是指 0 CPU 复制 1 0 复制演进 BIO 用户态/…

如何自己设计一个定时任务分布式调度器

为什么要使用分布式调度器 分布式调度器主要应用于系统中一些任务定时调度处理。通常我们设计一个定时任务&#xff0c;最简单的就是直接使用scheduled注解配置好定时任务&#xff0c;这样开发工作也简单。但是也许会有一种情况&#xff0c;如果发生在生产环境上&#xff0c;需…

FPGA学习笔记(五)Testbench文件编写

这里写目录标题Testbench文件时间单位/精度测试模块输入信号初始化always 语句实现信号变化实例化系统函数Testbench文件 编写Testbench的目的是在Modsim中进行仿真验证&#xff0c;查看仿真波形和打印信息验证代码逻辑。 例如下面代码&#xff1a; timescale 1ns/1ns modul…

python数据容器---list

目录 1、列表的定义 1.1 基本语法 1.2 定义变量 1.3 定义空列表 2、列表的下标&#xff08;索引&#xff09; 2.1 基本语法 2.1.1 正向查找 2.1.2 方向查找 2.1.3 嵌套列表 3、列表的常用操作 3.1 查找某元素的下标 3.2 修改特定索引的值 3.3 插入追加元素 3.4 删…

基于java+jsp+ssm水果蔬菜销售系统

生活中,人们买水果或者蔬菜都是去菜市场买,因为那里是卖水果、蔬菜的聚集地。农商们把水果、蔬菜从远处运到那里,进行销售。但是这种销售方式的不足在于每次运输的数量是有限的,并且运输过程中也影响了水果、蔬菜的口感。随着生活节奏的加快,人们越来越注重高效的在线服务。在线…

让GPU跑的更快

作为一个cuda爱好者 一定要好好看看 不再让CPU和总线拖后腿&#xff1a;Exafunction让GPU跑的更快&#xff01;确实只用cpu会卡的一比... 在云服务中使用 GPU 是获得低延迟深度学习推理服务最经济的方式。使用 GPU 的主要瓶颈之一是通过 PCIe 总线在 CPU 和 GPU 内存之间复制…

关卡一: ajax

【学习前提】 完成前端开发基础和JavaScript基础学习 【阶段说明】 Ajax这个术语源自描述从基于 Web 的应用到基于数据的应用。 Ajax 不是一种新的编程语言&#xff0c;而是一种用于创建更好更快以及交互性更强的Web应用程序的技术。 使用 JavaScript 向服务器提出请求并处理响…

有被惊艳到 复刻一个大型互联网项目有多简单?大型网约车项目实战+东宝商城(附项目白皮书+核心源码)

从上图可以看出&#xff0c;面试准备其实可以分为两个部分&#xff1a;第一个部分是日常工作中对自己负责项目的抽象、提效、数据化表达&#xff1b;不断反思如何用技术的手段提升业务价值&#xff0c;就是我们日常常说的技术为业务赋能&#xff1b;第二个部分才是决定面试后 &…

第八章 CSP 架构 - CSP 网关配置

文章目录第八章 CSP 架构 - CSP 网关配置CSP 网关配置CSP 网关管理器定义服务器访问定义应用程序访问CSP 网关参数第八章 CSP 架构 - CSP 网关配置 CSP 网关配置 CSP 网关是安装在 Web 服务器上并由其加载的 DLL 或共享库。 CSP 网关检测对扩展名为 .csp 或 .cls 的文件的任何…

ApplicationRunner和CommandLineRunner的作用和区别

一、作用 ApplicationRunner和CommandLineRunner都用于在容器启动后&#xff08;也就是SpringApplication.run()执行结束&#xff09;执行某些逻辑。 可用于项目的一些准备工作&#xff0c;比如加载配置文件&#xff0c;加载执行流&#xff0c;定时任务等 二、共同点和区别 …

nodejs+vue+elementui学生成绩管理系统python/php/java445

前台首页功能模块 学生成绩管理系统设计&#xff1b;主要实现首页、优秀教师、优秀班主任、学校简介、教学课件、公告信息、优秀学生、试卷列表、新闻资讯、我的、跳转到后台&#xff0c;功能。 优秀教师&#xff0c;在优秀教师页面可以填写标题、教师工号、荣誉等详细&#xf…

经典论文研读:《F1:A Distributed SQL Database That Scales》

一 简介 F1是Google提出的分布式关系型数据库&#xff0c;支持便捷的水平伸缩。这篇论文是NewSQL分布式数据库架构的基石。论文首先定义了F1分布式数据库设计的关键方向&#xff1a; 可伸缩性&#xff1a;数据库要提供对业务透明的水平扩展能力&#xff0c;并支持数据迁移、数…

全同态加密(FHE)体系概述

同态加密定义 假设有这样一个场景&#xff0c;用户有一组私密数据&#xff0c;被加密存储在了第三方的云平台&#xff0c;现在&#xff0c;该用户想对这组数据进行某种处理&#xff0c;但是处理过程和结果都不想让第三方云平台看到。当然&#xff0c;用户可以选择将数据下载下…

ITU-T G.781解读(一)

引言 本系列是作者在学习ITU-T时做学习笔记之用&#xff0c;ITU-T的标准库是一个非常庞大的系列&#xff0c;尽管网络上有许多对标准的解读&#xff0c;但作者认为要想系统的掌握一个系列的知识&#xff0c;还是要自己看一遍原汁原味的原文。 时钟同步准则 同步信息通过同步…