推荐NLP基础 RNN循环神经网络

news/2024/4/30 1:35:45/文章来源:https://blog.csdn.net/qq_44089890/article/details/130023954

NLP概述

Natural Language Processing(NLP, 自然语言处理)

目的:让计算机处理或“理解”自然语言,以执行语言翻译和问题回答等任务;最终
来讲就是构建机器语言和人类语言之间的沟通桥梁,实现人机交流为最终目的。
常见应用:

  • 关键词提取、
  • 概要抽取、
  • 事件提取
  • 命名实体识别(提取价格、日期、姓名、公司、地点等) 关系抽取
  • 分类:文本分类、情感分析、意图识别等
  • 机器翻译
  • 语音文本转换、图像文本转换
  • 问答系统

从另外一个角度来看,NLP分为NLU和NLG两个子任务:

  • NLU(Natural Language Understanding)自然语言理解
    • 含义:让计算机理解自然语言文本的意义;
    • 主要任务方向:分词、词性标注、文本分类、实体识别、信息抽取等;
  • NLG(Natural Language Generation)自然语言生成
    • 含义:将非语言格式的数据转换成人类可理解的语言格式;
    • 主要任务方向:机器翻译、问答系统、聊天机器人等;

什么是递归神经网络

  • 为什么有BP神经网络、CNN,还需要RNN?
    • BP神经网络和CNN的输入输出都是互相独立的;但是实际应用中有些场景输出内容 和之前的内容是有关联的。
    • RNN引入“记忆”的概念;递归指其每一个元素都执行相同的任务,但是输出依赖 于输入和“记忆” 。

我们已经学习了前馈网络的两种结构——BP神经网络和卷积神经网络,这
两种结构有一个特点,就是假设输入是一个独立的没有上下文联系的单位,
比如输入是一张图片,网络识别是狗还是猫。但是对于一些有明显的上下文
特征的序列化输入,比如预测视频中下一帧的播放内容,那么很明显这样的
输出必须依赖以前的输入, 也就是说网络必须拥有一定的”记忆能力”。
为了赋予网络这样的记忆力,一种特殊结构的神经网络——递归神经网络
(Recurrent Neural Network)便应运而生了。

递归神经网络RNN-应用场景

  • 自然语言处理(NLP)
  • 语言模型与文本生成
  • 机器翻译
  • 语音识别
  • 图像描述生成
  • 文本相似度计算等

RNN-结构

在这里插入图片描述
在这里插入图片描述

  • 网络某一时刻的输入xt,和之前介绍的bp神经网络的输入一样,xt是一个n维向量,
    不同的是递归网络的输入将是一整个序列,也就是x=[x1,…,xt1,xt,xt+1,…xT],对于语
    言模型,每一个xt将代表一个词向量,一整个序列就代表一句话。
  • ht代表时刻t的隐藏状态
  • ot代表时刻t的输出
  • 输入层到隐藏层之间的权重由U表示,它将我们的原始输入进行抽象作为隐藏层的输入
  • 隐藏层到隐藏层的权重W,它是网络的记忆控制者,负责调度记忆。
  • 隐藏层到输出层的权重V,从隐藏层学习到的表示将通过它再一次抽象,并作为最终输出。
    将序列按时间展开就可以得到RNN的结构
  • Xt是时间t处的输入
  • St是时间t处的“记忆”,St=f(UXt+WSt-1),f可以是非线性转换函数,比如tanh等
  • Ot是时间t处的输出,比如是预测下一个词的话,可能是sigmoid/softmax输出的属于每个候选词的概率,Ot=softmax(VSt)
    在这里插入图片描述
    按照一定的时间序列规定好计算顺序,于是实际上我们会将这样带环的结
    构展开成一个序列网络,也就是上图右侧被“unfold”之后的结构。
    在这里插入图片描述

RNN正向传播阶段

在t=1的时刻,U,V,W都被随机初始化好,h0通常初始化为0,然后进行如
下计算:
在这里插入图片描述
时间就向前推进,此时的状态h1作为时刻1的记忆状态将参与下一次的预测
活动,也就是:
在这里插入图片描述
以此类推,可得
![在这里插入图片描述](https://img-blog.csdnimg.cn/a2796e其中f可以是tanh,relu,sigmoid等激活函数,g通常是softmax也可以是其他。
值得注意的是,我们说递归神经网络拥有记忆能力,而这种能力就是通过W将以往的输入状态
进行总结,而作为下次输入的辅助。可以这样理解隐藏状态:h=f(现有的输入+过去记忆总结)

RNN反向传播阶段

  • bp神经网络用到的误差反向传播方法将输出层的误差总和,对各个权重的 梯度∇U,∇V,∇W,求偏导数,然后利用梯度下降法更新各个权重。
  • 对于每一时刻t的RNN网络,网络的输出ot都会产生一定误差et,误差的损
    失函数,可以是交叉熵也可以是平方误差等等。那么总的误差为E=∑tet,我 们的目标就是要求取
    在这里插入图片描述
    对于输出ot=g(Vst),对于任意损失函数,求取∇V将是简单的,我们可以直
    接求取每个时刻的∂e t / ∂V,由于它不存在和之前的状态依赖,可以直接求
    导取得,然后简单地求和即可。对于∇W,∇U的计算不能直接求导,因此需
    要用链式求导法则。
    为了使得误差e能够对U和W求偏导数,定义一个中δ=∂e/∂s,首先计算出
    输出层的δL,再向后传播到各层δL-1,δL-2,…,那么如何计算δ呢?
    在这里插入图片描述
    关注当前层次发射出去的链接即可,也就是
    在这里插入图片描述
    只要计算出所有的δot,δht,就可以通过以下计算出∇W,∇U:
    在这里插入图片描述

举个详细的例子计算W梯度的例子:

在这里插入图片描述
举个对于时刻t+1产生的误差et+1,我们想计算它对于W1,W2,…,Wt,Wt+1的梯度,可以如下计算
在这里插入图片描述
反复运用链式法则,我们可以求出每一个∇W1
,∇W2
,…,∇Wt,∇Wt+1,在
不同时刻都是共享同样的参数,这样可以大大减少训练参数,和CNN的共
享权重类似。对于共享参数的RNN,我们只需将上述的一系列式子抹去标
签并求和,就可以得到推导出来的公式为:
在这里插入图片描述
其中 在这里插入图片描述表示不利用链式法则直接求导,也就是假如对于函数f(h(x)),对
其直接求导结果如下:∂f(h(x))/∂x=f′(h(x)),也就是求导函数可以写成x的
表达式,也就是将h(x)看成常数了。
在Yoshua Bengio 论文中( http://proceedings.mlr.press/v28/pascanu
13.pdf )证明了在这里插入图片描述, 从而说明了这是梯度求导的一部分环节是
一个指数模型,当η<1时,就会出现梯度消失问题,而当η>1时,梯度爆炸
也就产生了。
为了克服梯度消失的问题,LSTM和GRU模型便后续被推出了,为什么
LSTM和GRU可以克服梯度消失问题呢?由于它们都有特殊的方式存储”记
忆”
,那么以前梯度比较大的”记忆”不会像简单的RNN一样马上被抹除,
因此可以一定程度上克服梯度消失问题。(问题描述:在普通RNN中对于
长序列而言,很早之前时刻输入的信息,对于当前时刻是不会产生影响
的。

另一个简单的技巧可以用来克服梯度爆炸的问题就是gradient clipping,
也就是当你计算的梯度超过阈值c的或者小于阈值−c时候,便把此时的梯度
设置成c或−c
下图所示是RNN的误差平面,可以看到RNN的误差平面要么非常陡峭,要
么非常平坦,如果不采取任何措施,当你的参数在某一次更新之后,刚好碰
到陡峭的地方,此时梯度变得非常大,那么你的参数更新也会非常大,很容
易导致震荡问题。而如果你采取了gradient clipping这个技巧,那么即使
你不幸碰到陡峭的地方,梯度也不会爆炸,因为梯度被限制在某个阈值c。
在这里插入图片描述

Bidirectional RNN-双向RNN

双向循环神经网络(Bidirectional RNN)是一种循环神经网络(RNN)的变体,它在每个时间步同时考虑当前时刻之前和之后的输入信息。

传统的循环神经网络只能向前传递信息,即当前时刻的状态只依赖于之前的状态和当前时刻的输入。而双向循环神经网络则通过增加一个反向的循环结构,在当前时刻之后的时间步也能够传递信息,这样可以更好地捕捉序列数据中的上下文信息,提高模型的性能。

双向循环神经网络的结构如下图所示:

其中,正向循环神经网络和反向循环神经网络的输出会分别输入到一个全连接层(或其他层)中进行后续的处理。最终,两个方向的输出会进行拼接,形成一个维度为2h的输出向量。

双向循环神经网络在自然语言处理、语音识别、图像处理等领域广泛应用,例如在机器翻译中,双向循环神经网络可以同时考虑源语言和目标语言的上下文信息,从而提高翻译质量。

Bidirectional RNN(双向RNN)假设当前t的输出不仅仅和之前的序列有关,并且还与之后的序列有关,例如:预测一个语句中缺失的词语那么需要根据上下文进行预测;Bidirectional RNN是一个相对简单的RNNs,由两个RNNs上下叠加在一起组成。输出由这两个RNNs的隐藏层的状态决定。
在这里插入图片描述
在这里插入图片描述

Deep(Bidirectional) RNN-深度双向RNN

Deep Bidirectional RNN(深度双向循环神经网络)是一种深度学习模型,它将多层双向循环神经网络(Bidirectional RNN)叠加在一起,用于处理序列数据,如文本、语音、视频等。

在传统的循环神经网络(RNN)中,每个时间步的输出只依赖于当前时间步的输入和上一个时间步的状态。而在双向循环神经网络中,每个时间步的输出不仅依赖于当前时间步的输入和上一个时间步的状态,还依赖于后面时间步的输入和状态。这种双向的信息流可以更好地捕捉序列数据中的上下文信息,提高模型的性能。

在深度双向循环神经网络中,我们将多个双向循环神经网络叠加在一起,形成一个深度的神经网络结构。每个双向循环神经网络的输出作为下一层双向循环神经网络的输入,逐层传递信息,从而更好地捕捉序列数据中的复杂关系。

深度双向循环神经网络在自然语言处理、语音识别、视频分析等领域得到了广泛应用,并取得了很好的效果。

Deep Bidirectional RNN(深度双向RNN)类似Bidirectional RNN,区别在于每个每一步的输入有多层网络,这样的话该网络便具有更加强大的表达能力和学习能力,但是复杂性也提高了,同时需要训练更多的数据。
在这里插入图片描述

循环神经网络RNN-BPTT

循环神经网络(Recurrent Neural Network,RNN)是一种能够处理序列数据的神经网络模型,它通过在网络中引入循环连接来处理序列数据中的时序信息。

在训练RNN模型时,通常使用反向传播算法(Backpropagation Through Time,BPTT)来计算模型参数的梯度。BPTT算法是将时间展开的RNN看作一个有向无环图(DAG),按照时间顺序对每个时间步进行前向传播和反向传播,从而计算出每个时间步的参数梯度。

BPTT算法的具体流程如下:

  • 前向传播:对于每个时间步,将输入数据和前一个时间步的状态输入到RNN模型中,计算当前时间步的输出和状态。
  • 损失函数计算:使用当前时间步的输出和目标值计算损失函数。
  • 反向传播:从当前时间步开始,将损失函数对当前时间步的输出和状态求梯度,并沿着时间维度反向传播,计算每个时间步的参数梯度。
  • 参数更新:使用优化算法(如随机梯度下降)根据计算出的参数梯度来更新模型参数

需要注意的是,由于RNN在时间维度上的循环结构,BPTT算法在反向传播时需要将梯度沿时间维度进行传递,这样会导致梯度消失或爆炸的问题。为了解决这个问题,可以采用一些技巧,如梯度裁剪、LSTM、GRU等。

RNN的训练和CNN/ANN训练一样,同样适用BP算法误差反向传播算法。
区别在于:RNN中的参数U\V\W是共享的,并且在随机梯度下降算法中,
每一步的输出不仅仅依赖当前步的网络,并且还需要前若干步网络的状态,
那么这种BP改版的算法叫做Backpropagation Through Time(BPTT);
BPTT算法和BP算法一样,在多层(多个输入时刻)训练过程中(长时依赖<即
当前的输出和前面很长的一段序列有关,一般超过10步>),可能产生梯度
消失和梯度爆炸的问题。

BPTT和BP算法思路一样,都是求偏导,区别在于需要考虑时间对step的影

LSTM

LSTM(Long Short-Term Memory)是一种特殊的循环神经网络(RNN),通过引入记忆单元(memory cell)和门控机制(gate mechanism),可以有效地解决传统RNN模型中存在的梯度消失和梯度爆炸问题,以及长序列建模中的记忆衰减问题。

LSTM的主要组成部分包括:输入门(input gate)、遗忘门(forget gate)、输出门(output gate)和记忆单元(memory cell)。其中,输入门用于控制新输入的重要性,遗忘门用于控制前一时刻的记忆是否需要被遗忘,输出门用于控制当前时刻的输出是否需要被输出,记忆单元用于存储并传递信息。

LSTM的计算过程如下:

  • 输入门:对于当前时刻的输入和前一时刻的状态,计算输入门的输出,表示新输入的重要性。
  • 遗忘门:对于当前时刻的输入和前一时刻的状态,计算遗忘门的输出,表示前一时刻的记忆需要被保留的程度。
  • 记忆单元:对于当前时刻的输入、前一时刻的状态、输入门和遗忘门的输出,计算记忆单元的输出,表示当前时刻的记忆。
  • 输出门:对于当前时刻的输入、前一时刻的状态和记忆单元的输出,计算输出门的输出,表示当前时刻的输出。

LSTM在自然语言处理、语音识别、图像处理等领域得到了广泛应用,例如在机器翻译中,LSTM可以有效地处理长序列数据,并且能够捕捉跨语言的语法和语义信息,从而提高翻译质量。

在RNN计算中,介绍到对于长期/长时依赖的问题,没法进行解决,可能产生梯度消失和梯度爆炸的问题;LSTM特别适合解决这类需要长时间依赖的问题。

LSTM是RNN的一种变种,大体结构一致,区别在于:

  • LSTM的“记忆细胞”是改造过的
  • 该记录的信息会一直传递,不该记录的信息会被截断掉
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • LSTM关键:“细胞状态”
    • 细胞状态类似于传送带。直接在整个链上运行,只有一些少量的线性交互。信息在 上面流传保持不变很容易
      在这里插入图片描述
  • LSTM怎么控制“细胞状态”?
    • LSTM可以通过gates(“门”)结构来去除或者增加“细胞状态”的信息包含一个sigmoid神经网络层次和一个pointwist乘法操作
    • Sigmoid层输出一个0到1之间的概率值,描述每个部分有多少量可以通过,0表示“不允许任务变量通过”,1表示“运行所有变量通过”
    • LSTM中主要有三个“门”结构来控制“细胞状态”

第一个“门”==>“忘记门”/“遗忘门”:决定从“细胞状态”中丢弃什么信息;比如在语言模型中,细胞状态可能包含了性别信息(“他”或者“她”),当我们看到新的代名词的时候,可以考虑忘记旧的数据.
在这里插入图片描述

  • 第二个“门”==>“信息增加门”:决定放什么新信息到“细胞状态”中;
    • Sigmoid层决定什么值需要更新;
    • Tanh层创建一个新的候选向量Ct;
    • 主要是为了状态更新做准备
      在这里插入图片描述
  • 经过第一个和第二个“门”后,可以确定传递信息的删除和增加,即可以进行“细胞状态”的更新
    • 更新Ct-1为Ct;
    • 将旧状态与ft相乘,丢失掉确定不要的信息;
    • 加上新的候选值it*Ct得到最终更新后的“细胞状态”
      在这里插入图片描述
  • 第三个“门”==>基于“细胞状态”得到输出,也就是“输出门”;
    • 首先运行一个sigmoid层来确定细胞状态的那个部分将输出
    • 使用tanh处理细胞状态得到一个-1到1之间的值,再将它和sigmoid门的输出相乘, 输出程序确定输出的部分
      在这里插入图片描述

LSTM变种

"Peephole connections"是一种用于改进LSTM模型的技术,它引入了额外的连接来允许LSTM单元访问记忆单元中的信息。在传统的LSTM模型中,输入门、遗忘门和输出门只能访问输入和前一时刻的状态,而不能直接访问记忆单元中的信息。"Peephole connections"通过添加额外的连接,允许门控单元直接访问记忆单元中的信息,从而提高模型的表达能力和记忆能力。

具体来说,"Peephole connections"将LSTM模型中的三个门(输入门、遗忘门和输出门)与记忆单元中的状态相连接。这些连接允许门控单元直接访问记忆单元中的信息,并将这些信息纳入到门控单元的计算中。这样,LSTM模型就能够更好地利用先前的信息来控制当前时刻的输入和输出。

使用"Peephole connections"层的LSTM模型的计算流程与传统的LSTM模型类似,只是在输入门、遗忘门和输出门的计算中,额外考虑了记忆单元中的状态。通过引入"Peephole connections"层,LSTM模型可以更好地处理长序列数据,并且能够更好地捕捉序列中的长期依赖关系,从而提高模型的性能。

  • 变种1
    • 增加“peephole connections”层
    • 让门层也接受细胞状态的输入
      在这里插入图片描述
  • 变种2
    • 通过耦合忘记门和更新输入门(第一个和第二个门);也就是不再单独的考虑忘记什么、
    • 增加什么信息,而是一起进行考虑。
      在LSTM和GRU中,遗忘门和更新门是分开的,分别控制着前一时刻的记忆是否需要被遗忘和当前时刻的输入是否需要被更新。然而,有研究表明,将遗忘门和更新门耦合起来可以提高模型的性能。

具体来说,耦合遗忘门和更新输入门的方法是将遗忘门和更新门中的参数结合在一起,形成一个统一的门控单元。这个门控单元同时控制着前一时刻的记忆和当前时刻的输入的更新,从而可以更好地处理序列中的长期依赖关系。

通过耦合遗忘门和更新输入门,可以减少LSTM和GRU中的参数数量,并且可以提高模型的表达能力和记忆能力。此外,由于耦合遗忘门和更新输入门可以更好地控制信息的流动,因此也可以减少模型的过拟合。

值得注意的是,耦合遗忘门和更新输入门的方法并不适用于所有的序列建模任务。在某些任务中,遗忘门和更新门的独立控制可以更好地适应任务的特性。因此,在实际应用中,需要根据具体任务的特点来选择合适的门控机制。

在这里插入图片描述

GRU

GRU(Gated Recurrent Unit)是一种循环神经网络(RNN)的变种,类似于LSTM,它也使用了门控机制来解决传统RNN模型中存在的梯度消失和梯度爆炸问题,以及长序列建模中的记忆衰减问题。

GRU的主要组成部分包括:重置门(reset gate)和更新门(update gate)。其中,重置门用于控制前一时刻的状态在当前时刻是否需要被重置,更新门用于控制当前时刻的输入和前一时刻的状态在当前时刻是否需要被更新。

GRU的计算过程如下:

重置门:对于当前时刻的输入和前一时刻的状态,计算重置门的输出,表示前一时刻的状态在当前时刻是否需要被重置。

更新门:对于当前时刻的输入和前一时刻的状态,计算更新门的输出,表示当前时刻的输入和前一时刻的状态在当前时刻是否需要被更新。

计算当前时刻的状态:对于当前时刻的输入、重置门和更新门的输出,计算当前时刻的状态。

GRU相对于LSTM来说,参数更少,计算速度更快,且能够取得与LSTM相当的性能。在自然语言处理、语音识别、图像处理等领域得到了广泛应用,例如在机器翻译中,GRU可以有效地处理长序列数据,并具有更好的训练速度和模型压缩性能。

  • Gated Recurrent Unit(GRU),2014年提出
    • 将忘记门和输出门合并成为一个单一的更新门
    • 同时合并了数据单元状态和隐藏状态(细胞状态和输出状态) 结构比LSTM的结构更加简单
      在这里插入图片描述

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

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

相关文章

Python 虚拟环境迁移到其他电脑

一、背景介绍 在 Python 项目开发过程中&#xff0c;根据不同的项目场景&#xff0c;需要切换不同的 Python 版本。 因此&#xff0c;我们经常会对不同的项目&#xff0c;创建特定的 Python 虚拟环境&#xff0c;实现项目环境间的“物理隔离”。 本地创建 Python 虚拟环境&…

三、位置判断与代码搬移

判断当前位置 判断当前位置是否在SDRAM # < cpu\arm920t\start.S > relocate1: /* relocate U-Boot to RAM */ adr r0, _start /* r0 <- current position of code */ ldr r1, _TEXT_BASE /* test if we run from flash or RAM */ cmp r0, r1 /* dont reloc…

基于支持向量机SVM的脑部肿瘤识别,脑电波样本熵提取

目录 支持向量机SVM的详细原理 SVM的定义 SVM理论 Libsvm工具箱详解 简介 参数说明 易错及常见问题 SVM应用实例,基于SVM的的脑部肿瘤识别分类预测 代码 结果分析 展望 支持向量机SVM的详细原理 SVM的定义 支持向量机(support vector machines, SVM)是一种二分类模型,它…

电视王者沦落到再度卖楼求生,家电巨头跌落神坛,凸显行业之囧

电视无疑是中国家电行业中做得最成功的行业之一&#xff0c;在国内市场将外资品牌挤压出市场&#xff0c;还走向了海外市场&#xff0c;不过有一家国内的电视企业如今却无奈再度卖楼求生&#xff0c;这家企业就是长虹。一、长虹的变幻长虹称雄国内电视市场出自上一任领导人倪润…

pytorch 线性回归总结

测试1(y3∗x1−4∗x2y3*x_{1}-4*x_{2}y3∗x1​−4∗x2​),lr1e-2 %matplotlib inline import torch import numpy as np torch.manual_seed(1) from torch.nn import Linear from torch.autograd import Variable import torch.nn as nn import random np.random.seed(1) rand…

Robocup 仿真2D 学习笔记(四)阵型编辑

一、阵型文件介绍 阵型文件里设置的是球员在比赛中的跑位点 基于helios base的阵型文件&#xff0c;在目录/src/formations-dt中 阵型的调用在/src/strategy.cpp 文件&#xff1a; before-kick-off.conf 是球员上场之后的阵型 &#xff08;或进球等待开球&#xff09; no…

049:cesium加载czml文件,显示图形

第049个 点击查看专栏目录 本示例的目的是介绍如何在vue+cesium中加载czml文件, 显示图形。这是官网的一个示例,这里转换了处理方式。 直接复制下面的 vue+cesium源代码,操作2分钟即可运行实现效果. 文章目录 示例效果配置方式示例源代码(共78行)相关API参考:专栏目标示…

暴击一棵树——二叉树入门一(入门基础概念)

目录 1.树的概念 2.二叉树的概念 二叉树&#xff08;Binary Tree&#xff09; 满二叉树&#xff08;Full Binary Tree&#xff09; 完全二叉树&#xff08;Complete Binary Tree&#xff09; 3.堆和二叉树 4、二叉树的结构 1.二叉树的逻辑结构 2.二叉树的物理结构 1.树…

《钢琴调律师 五级》 笔记

声音产生的三个条件&#xff1a;物体振动、媒质传播、人耳接收 复合音&#xff1a;由一些频率不同的简谐成分合成的声音。大多数乐器都是复合音&#xff0c;因此才各有不同的音色特征 纯音&#xff1a;物体做简谐振动所产生的声音 乐音&#xff1a;指有较为明确音调感的声音。噪…

spark第七章:SparkStreaming实例

系列文章目录 系列文章目录 spark第一章&#xff1a;环境安装 spark第二章&#xff1a;sparkcore实例 spark第三章&#xff1a;工程化代码 spark第四章&#xff1a;SparkSQL基本操作 spark第五章&#xff1a;SparkSQL实例 spark第六章&#xff1a;SparkStreaming基本操作 spa…

javaEE+jsp820高校校园设备报修系统dzkfa9程序mysql

1&#xff0e;系统登录&#xff1a;系统登录是用户访问系统的路口&#xff0c;设计了系统登录界面&#xff0c;包括用户名、密码和验证码&#xff0c;然后对登录进来的用户判断身份信息&#xff0c;判断是管理员用户还是普通用户。 2&#xff0e;系统用户管理&#xff1a;不管是…

从C出发 13 --- 多维数组

数组的本质是数据集合&#xff0c;我们在程序里面操作数组&#xff0c;就是在操作数据 数组中的元素能不能是其他程序元素? 这个说法只是表示数组里面的元素是int 类型 而这个数组的类型是 int [5] 由元素类型和数组大小共同决定 int a[10] {0}; // a的类型 : int[10]…

文件小注意

目录 0 前言 1 标识 O_CREAT O_APPEND 2 ftruncate与truncate 3 O_DIRECT与O_DSYNC、O_SYNC 4 open与fopen 5 关于mmap 0 前言 文件操作在软件开发中是很常见的一件事。虽然与它相关的工作看起来不怎么起眼&#xff0c;无非就是通过通过open、read、write、close几个调用…

【MySQL】主从复制过程(实践)

1.安装好2台数据库服务器的系统&#xff0c;然后安装好MySQL软件 [rootjd-mysql ~]# mysql --version mysql Ver 14.14 Distrib 5.7.40, for linux-glibc2.12 (x86_64) using EditLine wrapper[rootjd-mysql-2 ~]# mysql --version …

第03章_用户与权限管理

第03章_用户与权限管理 1. 用户管理 ​ MysQL用户可以分为普通用户和root用户。root用户是超级管理员&#xff0c;拥有所有权限&#xff0c;包括创建用户 、删除用户和修改用户的密码等管理权限;普通用户只拥有被授予的各种权限。 MysQL提供了许多语句用来管理用户账号&#…

认识C++字符串复合类型

目录 前言&#xff1a; 1.数组 1.1C的数组 1.2C数组初始化 *2.字符串 2.1字符串与数组 2.2字符数组的存储 2.3字符串输入cin 2.4cin.getline() 2.5cin.get() 2.6函数重载例子 2.7混合输入数字和字符串 前言&#xff1a; C与C语言在内容上有些是一样的&#xff0c;也…

Zooker配置与测试

目录 1.介绍 2.配置 1.配置准备 2.配置修改 3.测试 1.介绍 2.配置 1.配置准备 zookeeper官网:Apache ZooKeeper &#xff08;1&#xff09;安装 JDK &#xff08;2&#xff09;拷贝 apache-zookeeper-3.5.7-bin.tar.gz 安装包到software目录下 &#xff08;3&#xff09;解…

mysql常用的基础命令

通过学习mysql命令提高数据处理和工作效率 基础命令 1.登录MySQL mysql -u root -p 2.查看当前系统所有数据库 show databases; 3.切换数据库 use 数据库名称 4.查看数据库下的所有表 show tables; 5.查看表结构&#xff1b; desc 表名&#xff1b; 6.创建数据库 crea…

CentOS7的下载、安装和配置(详细图解)

CentOS7安装包的下载 Centos7的安装包可以去官网&#xff08;https://www.centos.org/&#xff09;下载&#xff0c;但速度比较慢。 也可以用搜索引擎搜索国内镜像站点的安装包文件与官网同步&#xff0c;下载的速度非常快。 CentOS7软件安装包的分享 百度网盘分享&#xff…

python函数详解_INDEX函数

一. 函数的作用 函数就是将一段具有独立功能的代码块 整合到一个整体并命名&#xff0c;在需要的位置调用这个名称即可完成对应的需求。 函数在开发过程中&#xff0c;可以更高效的实现代码重用。 二. 函数的使用步骤 1. 定义函数 def 函数名(参数):代码1代码2...... 复制 …