版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
深度学习基础与实例教程循环神经网络第六章目录02LSTM模型LSTMmodel01循环神经网络简介IntroductiontoRecurrentNeuralNetworks循环神经网络简介IntroductiontoRecurrentNeuralNetworks3016.1.1什么是循环神经网络4在了解循环神经网络之前,首先要了解时间序列。时间序列数据是按照时间顺序排列的数据集合,其中每个数据点都与某时刻的时间点相关联。时间序列数据通常用于描述随时间变化的现象,如股票价格、气温、销售额等。时间序列数据通常具有以下两个特点。(1)某一时刻的数据点与另一时刻的数据点具有关联性。例如,股票数据是典型的时间序列。如果股票价格呈现上升趋势,即股价高于之前的价格,并且价格的涨幅在逐步扩大,那么可能会吸引更多的投资者,从而推动股价继续上涨。相反,如果股价呈现下降趋势,可能会导致更多投资者选择卖出,从而加速股价的下跌。股票价格的涨跌与之前的数据有密切的关联。(2)时间序列长度有时不固定。例如,在自然语言处理任务中,模型通常要适应不同长度的文本输入。例如在文本情感分析任务中,文本“我今天很开心”与“今天真是个令人难过的日子”的长度并不相同,如果不对数据进行填充,就需要模型能够具有输入不同长度数据的能力。6.1.1什么是循环神经网络5假设我们要借助深度学习做一个翻译软件将课本上的英语句子转换成常用的中文,我们应该选择什么样的模型作为基础模型呢?任何语言中,单词的位置和顺序对于句子所要表达的内容有着极其重要的影响。这种所构造出来的列表对象就是一种时间序列,而以序列模式逐个处理句子中的词语,能够使得词语的在句子中的位置信息不会被打乱,而且也不需要额外的操作。而循环神经网络(RecurrentNeuralNetwork,RNN)就可以很好的处理这些问题。循环神经网络是一类以序列数据为输入,在序列的演进方向进行递归,所有节点(循环单元)按链式连接的递归神经网络。其具有记忆性且模型的参数共享,除了处理上面提到的翻译任务,还可以完成同处自然语言处理领域的语音识别、文本情感分析等。对于时间序列的两种特性,循环神经网络都能够较好的应对:(1)通过隐藏层实现对之前时刻的“记忆”;(2)通过递归形式处理序列,对每一时刻使用相同的参数,可适应不同长度的输入。6.1.2循环神经网络结构6RNN之所以能够较好的处理序列信息,依靠得不仅是能够处理输入层的信息,还在于能够在当前时刻利用好上一时刻传递过来的信息,也就是说,每一时刻隐藏层的输出不仅由该单元的输入层决定,还和上一时刻的隐藏层有关系。简单的RNN网络结构如图所示。6.1.2循环神经网络结构7RNN对于输入序列的处理并不是并行的,需要单独输入每一个序列进行处理。第一时刻RNN的输入与输出如图所示:6.1.2循环神经网络结构8第二时刻RNN输入如图所示,随后时刻依此类推:6.1.2循环神经网络结构9RNN是一个在输入序列上滑动的过程,对于每一时刻使用相同的RNN循环单元对输入序列进行计算。每一时刻的RNN循环单元有两个输入,即特征x与隐藏状态h。每一时刻同样有两个输出,即特征输出y与隐藏状态h。RNN通过隐藏状态h,实现了对之前时刻特征的“记忆”。与全连接神经网络的不同在于,RNN每一时刻的输出都由x与h共同决定,而全连接神经网络只与x有关。RNN循环单元如图所示。6.1.2循环神经网络结构10假设有一序列X={x0,x1,……,xt},对于某一时刻t,可以使用如下两个公式来表达RNN循环单元的操作:其中w,u,v是权重系数,是神经网络在梯度下降过程中需要学习的参数。特别地,RNN对于每一时刻都是权重共享的,即对每一时刻都使用相同的w,u,v进行计算。需要注意的是,隐藏层在第一个时刻的状态通常是人为定义的,可以定义全0的状态向量,也可定义随机状态向量,根据实际效果而定。RNN的输出模式有多种情况,常见的有序列-分类器(manytoone)和编码器-解码器(manytomany)。6.1.2循环神经网络结构11(1)序列-分类器(manytoone)序列-分类器模式适用于多输入单输出的形式,主要用于感分析等分类任务。此模式下通常使用最后一个时刻的输出作为分类标准,因为它包含了前面RNN操作系列得到的记忆,然后通过分类器对最后一个时刻的输出序列进行分类,即可得到分类结果,如图所示。6.1.2循环神经网络结构12(2)编码器-解码器(manytomany)编码器-解码器模式适用于多输入多输出的形式,常用于机器翻译等任务,如图6-5所示。此模式下RNN被分为编码器与解码器两个部分。编码器的作用是将输入序列编码成一个固定长度的向量,该向量包含了输入序列的语义信息。解码器接受编码器输出的语义表示,并生成输出序列。6.1.3案例:基于循环神经网络的文本情感分析实战13加载IMDB数据集IMDB数据集包含来自互联网的50000条具有明显偏向的电影评论,其中划分了其中25000条作为训练集,25000条作为测试集。标签分为积极(pos,positive)和消极(neg,negative)。该数据集已经经过预处理,评论(单词序列)已经被转换为整数序列,其中每个整数代表字典中的某个单词。对应单词在字典中的下标排名越靠前,说明该单词出现频率越高。代码如下:6.1.3案例:基于循环神经网络的文本情感分析实战14importtensorflowastfimportosfromtensorflowimportkerasfromkerasimportlayers,optimizers,datasets,lossesbatch_size=128#批量大小embedding_len=100#词向量特征长度ntotal_words=10000#词汇表大小max_review_len=80#句子最大长度defget_imdb_dataset():"""
获取imdb数据集
:return:训练集,测试集
"""(x_train,y_train),(x_test,y_test)=datasets.imdb.load_data(num_words=total_words)#截断和填充句子
x_train=keras.preprocessing.sequence.pad_sequences(x_train,maxlen=max_review_len)x_test=keras.preprocessing.sequence.pad_sequences(x_test,maxlen=max_review_len)
#构建数据集并作预处理
db_train=tf.data.Dataset.from_tensor_slices((x_train,y_train))db_train=db_train.shuffle(1000).batch(batch_size,drop_remainder=True)db_test=tf.data.Dataset.from_tensor_slices((x_test,y_test))db_test=db_test.batch(batch_size,drop_remainder=True)returndb_train,db_test
db_train,db_test=get_imdb_dataset()6.1.3案例:基于循环神经网络的文本情感分析实战15classRNN(tf.keras.Model):def__init__(self,units):"""
初始化函数
:paramunits:隐藏层单元个数
"""super(RNN,self).__init__()#为了增强模型效果,定义两个隐藏状态
self.state0=[tf.zeros([batch_size,units])]self.state1=[tf.zeros([batch_size,units])]#词嵌入层将文本序列转换成特征序列
self.embedding=layers.Embedding(total_words,embedding_len,input_length=max_review_len)#为了增强模型效果,定义两个RNN单元
self.rnn_cell0=layers.SimpleRNNCell(units=units,dropout=0.2)self.rnn_cell1=layers.SimpleRNNCell(units=units,dropout=0.2)#分类器
self.out_layer=layers.Dense(1)defcall(self,inputs,training=None,mask=None):"""
前向传播函数
:paraminputs:输入:paramtraining:是否为训练阶段
:parammask:是否使用mask:return:返回概率输出
"""#获取初始状态
state0=self.state0state1=self.state1#将输入转化为tensorinputs=tf.convert_to_tensor(inputs)#将文本向量化
x=self.embedding(inputs)#通过循环,分别遍历每一时刻的序列
forwordintf.unstack(x,axis=1):#将每一时刻的序列输入至RNN单元
out0,state0=self.rnn_cell0(word,state0,training=training)#将第一层RNN单元的输出输入至第二层RNN单元
out1,state1=self.rnn_cell1(out0,state1,training=training)#获取最后一个时刻的输出,并将其分类
x=self.out_layer(out1)#输出概率
prob=tf.sigmoid(x)returnprob6.1.3案例:基于循环神经网络的文本情感分析实战16训练与评估由于数据集的标签分为两类,所以我们面对的是一个二分类问题,网络的输出是一个概率值,因此在网络的损失函数的选择上我们更倾向于使用在这上面表现较好的二元交叉熵(binary_crossentropy)损失函数。对于输出概率值的模型,交叉熵(crossentropy)通常是较好的选择。模型训练训练完成后,将会被评估并保存。代码如下:6.1.3案例:基于循环神经网络的文本情感分析实战17deftrain():"""
训练模型
:return:"""units=64#状态向量长度
epoch=10#训练轮数
#定义优化器
optim=optimizers.Adam()#定义模型
model=RNN(units)#编译模型
pile(optimizer=optim,loss=losses.BinaryCrossentropy(),metrics=['accuracy'])
#训练模型
his=model.fit(db_train,epochs=epoch,validation_data=db_test)#his.history是对训练过程中指标变化的记录
print(his.history)#评估模型
result=model.evaluate(db_test)print(result)#保存模型
model.save('the_save_model',save_format="tf")train()6.1.3案例:基于循环神经网络的文本情感分析实战18Epoch1/10195/195[==============================]-24s108ms/step-loss:0.5339-accuracy:0.7046-val_loss:0.4107-val_accuracy:0.8147Epoch2/10195/195[==============================]-20s105ms/step-loss:0.3226-accuracy:0.8651-val_loss:0.4060-val_accuracy:0.8213Epoch3/10195/195[==============================]-21s108ms/step-loss:0.2079-accuracy:0.9187-val_loss:0.4927-val_accuracy:0.8216Epoch4/10195/195[==============================]-22s112ms/step-loss:0.1118-accuracy:0.9591-val_loss:0.6877-val_accuracy:0.8161Epoch5/10195/195[==============================]-22s113ms/step-loss:0.0736-accuracy:0.9735-val_loss:0.7184-val_accuracy:0.8123Epoch6/10195/195[==============================]-22s113ms/step-loss:0.0502-accuracy:0.9821-val_loss:0.8090-val_accuracy:0.8109Epoch7/10195/195[==============================]-22s115ms/step-loss:0.0422-accuracy:0.9850-val_loss:0.8589-val_accuracy:0.8057Epoch8/10195/195[==============================]-22s113ms/step-loss:0.0376-accuracy:0.9858-val_loss:0.9116-val_accuracy:0.8119Epoch9/10195/195[==============================]-24s124ms/step-loss:0.0361-accuracy:0.9877-val_loss:0.9289-val_accuracy:0.7690Epoch10/10195/195[==============================]-23s116ms/step-loss:0.0229-accuracy:0.9921-val_loss:0.9203-val_accuracy:0.79646.1.3案例:基于循环神经网络的文本情感分析实战19{'loss':[0.5339115262031555,0.32264018058776855,0.20789605379104614,0.11180208623409271,0.07361356168985367,0.050164658576250076,0.04216092452406883,0.03764434531331062,0.03610290214419365,0.02289348840713501],'accuracy':[0.704607367515564,0.8651041388511658,0.918749988079071,0.9591346383094788,0.9734775424003601,0.9821314215660095,0.9849759340286255,0.9858173131942749,0.9876602292060852,0.9921073913574219],'val_loss':[0.4107212424278259,0.40603867173194885,0.49271640181541443,0.6877098679542542,0.7183709740638733,0.8089863061904907,0.8589354157447815,0.9116200804710388,0.9289203882217407,0.9203355312347412],'val_accuracy':[0.8147035241127014,0.8212740421295166,0.8216345906257629,0.8161057829856873,0.8122596144676208,0.810857355594635,0.8057291507720947,0.8119391202926636,0.7689903974533081,0.7963541746139526]}195/195[==============================]-4s19ms/step-loss:0.9203-accuracy:0.7964[0.9203355312347412,0.7963541746139526]通过分析训练过程中的控制台输出信息,可以发现,训练集的准确率一直在上升,而验证集的准确率出现了下降的趋势;训练集损失持续下降,而验证集损失有上升趋势,说明模型出现了过拟合的问题。为了解决这个问题,可以在训练过程中加入早停机制,避免模型因为过度训练而造成的过拟合问题。控制台输出如下所示:LSTM模型LSTMmodel20026.2.1LSTM简介21LSTM,全称LongShortTermMemory(长短期记忆)。是一种常用于处理序列数据的循环神经网络(RNN)的变体。与传统的RNN相比,LSTM具有更强大的建模能力,可以更有效地处理长期依赖关系,避免了梯度消失的问题,因此在许多序列建模任务中表现更好。在RNN中,往往存在以下两个问题:在传统的RNN中,当序列很长时,通过反向传播算法计算梯度时,由于反向传播过程中梯度的连续相乘,梯度会呈指数级衰减或爆炸,导致在长序列上训练时,模型无法有效地学习到长期依赖关系。这会导致模型无法捕捉到序列中的重要信息,影响模型的性能和泛化能力。LSTM通过引入门控结构,有效地缓解了梯度消失与梯度爆炸问题,使得模型能够更好地处理长期依赖关系。梯度消失与梯度爆炸问题在传统的RNN中,由于缺乏有效的机制来控制信息的流动和更新,模型往往只能记住最近的几个时间步的信息,而忽略了更长距离的依赖关系。这种短期记忆问题限制了RNN在处理长序列时的表现。为了解决以上问题,LSTM引入记忆单元和门控结构。LSTM认为在一个时间序列中,不是所有信息都是同等有效的,大多数情况存在“关键词”或者“关键帧”,对于不重要的信息,可以选择“遗忘”。同时,在处理序列的同时,也要不断地概括已处理的内容,并用之前的内容帮助理解后续内容。短期记忆问题6.2.2LSTM结构22LSTM是RNN的变体,与RNN相同,其对时间序列也需要以滑动的形式单独对每一时刻进行处理。LSTM与RNN的不同之处主要在于计算单元上。LSTM计算单元如图所示。LSTM与RNN的不同在于,LSTM在计算单元中加入了记忆与门控结构(gate)。6.2.2LSTM结构23LSTM的关键在于从单元上方贯穿而过的线,这条线被成为LSTM的记忆,如图6-7所示。对记忆仅有两个操作:相乘与相加。在相乘操作中,LSTM的记忆向量会与一个0-1之间的向量相乘,若乘数趋近于0,那么相乘结果也趋于0,那么则可以认为,这个数值被遗忘;在相加操作中,记忆向量会与计算得到的向量相加,可以看作是记忆的保存。01记忆6.2.2LSTM结构2402门控结构遗忘门输入门输出门6.2.2LSTM结构25遗忘门遗忘门的主要结构是一个带有sigmoid激活函数的神经网络。其计算公式如下所示:其中W与b是神经网络需要学习的参数。神经网络的输入是每一时刻的数据xt与上一时刻的隐藏状态ht-1,两个向量通过拼接后,输入至遗忘门神经网络中,神经网络通过学习输出一个0-1区间内的遗忘向量,若遗忘向量的某一位趋于0,就意味着这一位的记忆要被遗忘;若某一位趋于1,那么则意味着这一位的记忆要被保留。最后,隐藏状态与记忆相乘,即可实现对记忆的遗忘与保留。遗忘门的结构如图所示。6.2.2LSTM结构26输入门输入门是一个选择记忆阶段,即确定什么样的新信息会存放到记忆中。输入门主要由两个神经网络组成,一个以sigmoid激活函数输出,另一个则以tanh激活函数输出。其计算公式如下:其中W与b是模型需要学习的参数。sigmoid函数确定了要保留的信息的比例,而tanh函数确定了新的信息的幅度。输入门的网络结构如图所示。6.2.2LSTM结构27输出门输出门是LSTM单元用于计算当前时刻的输出值的神经网络层。需要注意的是,LSTM的输出y与h是相同的,即LSTM单元的特征输出与隐藏状态一致。输出门主要由一个神经网络组成,其计算公式如下:其中W与b是模型需要学习的参数。其目的是将当前输入值与上一时刻输出值进行整合,再通过sigmoid激活函数确定特征的重要程度,随后通过下面的计算公式,将整合信息与记忆进行融合:对于记忆C,使用tanh激活函数将其映射到(-1,1)区间内,再与神经网络输出按位相乘,即可得到每一时刻的特征输出。6.2.3Bi-LSTM28RNN和LSTM都只能依据之前时刻的时序信息来预测下一时刻的输出,但在有些问题中,当前时刻的输出不仅与之前的状态有关,还可能和未来的状态有关系。比如预测一句话中缺失的单词不仅需要根据前文来判断,还需要考虑它后面的内容,真正做到基于上下文判断。比如在机器翻译任务中,有如下文本:“Therearesomeapples”对于上述文本,词语are是由apples决定的,这种依赖是由右向左的。而在RNN与LSTM中,文本输入的方向是由左向右的,因此RNN与LSTM很难捕获这种由右向左的依赖关系。双向长短时记忆网络(Bi-directionalLongShort-TermMemory,Bi-LSTM)的基本思想是每一个训练序列向前和向后分别送入两个LSTM,且两个LSTM连接到了同一个输出层。这样的结构就能够给输出层的输入序列中的每一个点的完整的过去和未来的上下文信息。时序信息在单向LSTM网络中是从前往后单向传输的,未能综合考虑上下文的时序信息。比如,对于一个语句的某个单词,单向模型只能获取到该单词前面的信息,但实际上该单词前后的信息对此单词的预测都有重要作用,这就需要采用Bi-LSTM网络。Bi-LSTM模型可以同时训练两个相反方向的LSTM,即可以同时获取某个单词的前后信息,并用来预测,所以一般来讲Bi-LSTM效果会优于单向LSTM.6.2.3Bi-LSTM29Bi-LSTM结构如图所示:双向LSTM模型最终输出是由两个单向LSTM网络的输出进行叠加。假设前向LSTM隐藏状态为ht,记忆为ct;后向LSTM隐藏状态为h’t,记忆为c’t,则双向LSTM模型的输出公式为:6.2.4案例:基于LSTM的文本情感分析实战30定义LSTM模型仿照RNN的模型定义模式,定义一个双层的LSTM模型。与RNN不同的是,LSTM模型具有两个状态,分别为隐藏状态与记忆,call函数中展示了LSTM模型状态的定义方式。代码如下:6.2.4案例:基于LSTM的文本情感分析实战31classLSTM(tf.keras.Model):def__init__(self,units):"""
初始化函数
:paramunits:隐藏层单元个数
"""super(LSTM,self).__init__()#词嵌入层将文本序列转换成特征序列
self.embedding=layers.Embedding(total_words,embedding_len,input_length=max_review_len)#为了增强模型效果,定义两个LSTM单元
self.lstm_cell0=layers.LSTMCell(units=units,dropout=0.2)self.lstm_cell1=layers.LSTMCell(units=units,dropout=0.2)#分类器
self.out_layer=layers.Dense(1)defcall(self,inputs,training=None,mask=None):
"""
前向传播函数
:paraminputs:输入
:paramtraining:是否为训练阶段
:parammask:是否使用mask:return:返回概率输出
"""state0=tf.zeros((2,batch_size,64))state1=tf.zeros((2,batch_size,64))#将输入转化为tensorinputs=tf.convert_to_tensor(inputs)#将文本向量化
x=self.embedding(inputs)#通过循环,分别遍历每一时刻的序列
forwordintf.unstack(x,axis=1):#将每一时刻的序列输入至LSTM单元
out0,state0=self.lstm_cell0(word,state0,training=training)#将第一层LSTM单元的输出输入至第二层LSTM单元
out1,state1=self.lstm_cell1(out0,state1,training=training)#获取最后一个时刻的输出,并将其分类
x=self.out_layer(out1)#输出概率
prob=tf.sigmoid(x)returnprob6.2.4案例:基于LSTM的文本情感分析实战32Epoch1/10195/195[==============================]-43s165ms/step-loss:0.4486-accuracy:0.7774-val_loss:0.3582-val_accuracy:0.8431Epoch2/10195/195[==============================]-30s155ms/step-loss:0.2856-accuracy:0.8806-val_loss:0.3825-val_accuracy:0.8367Epoch3/10195/195[==============================]-78s403ms/step-loss:0.2226-accuracy:0.9142-val_loss:0.4562-val_accuracy:0.8272Epoch4/10195/195[==============================]-30s152ms/step-loss:0.1631-accuracy:0.9406-val_loss:0.5012-val_accuracy:0.8111{'loss':[0.44861093163490295,0.28563809394836426,0.22256657481193542,0.1631482094526291],'accuracy':[0.7774438858032227,0.8806490302085876,0.914222776889801,0.940625011920929],'val_loss':[0.35821354389190674,0.38251104950904846,0.45623037219047546,0.5011518001556396],'val_accuracy':[0.8431089520454407,0.8366987109184265,0.8271634578704834,0.8110977411270142]}195/195[==============================]-8s43ms/step-loss:0.5012-accuracy:0.8111[0.5011518001556396,0.8110977411270142]通过分析控制台输出,可以发现相较于RNN模型,LSTM模型能够达到更高的准确率。训练模型,控制台输出如下:6.2.4案例:基于LSTM的文本情感分析实战33使用LSTM的封装模型在Keras库中,已经预先定义好了LSTM的封装模型,为了方便起见,可以直接调用LSTM的封装模型。代码如下:6.2.4案例:基于LSTM的文本情感分析实战34classLSTM(tf.keras.Model):def__init__(self,units):"""
初始化函数
:paramunits:隐藏层单元个数
"""super(LSTM,self).__init__()#词嵌入层将文本序列转换成特征序列
self.embedding=layers.Embedding(total_words,embedding_len,input_length=max_review_len)#定义第1层LSTM返回序列输出
self.lstm1=layers.LSTM(units=units,dropout=0.2,return_sequences=True)#定义第2层LSTM返回最后时刻输出
self.lstm2=LSTM(units=units,dropout=0.2,return_sequences=False)#分类器
self.out_layer=layers.Dense(1)defcall(self,inputs,training=None,mask=None):
"""
前向传播函数
:paraminputs:输入
:paramtraining:是否为训练阶段
:parammask:是否使用mask:return:返回概率输出
"""#将输入转化为tensorinputs=tf.convert_to_tensor(inputs)#将文本向量化
x=self.embedding(inputs)#第1层LSTMout=self.lstm1(x)#第2层LSTMout=self.lstm2(out)#获取最后一个时刻的输出,并将其分类
x=self.out_layer(out)#输出概率
prob=tf.sigmoid(x)returnprob6.2.4案例:基于LSTM的文本情感分析实战35Epoch1/10195/195[==============================]-132s672ms/step-loss:0.4701-accuracy:0.7643-val_loss:0.3647-val_accuracy:0.8405Epoch2/10195/195[==============================]-126s649ms/step-loss:0.2887-accuracy:0.8796-val_loss:0.3752-val_accuracy:0.8345Epoch3/10195/195[==============================]-130s669ms/step-loss:0.2264-accuracy:0.9132-val_loss:0.4555-val_accuracy:0.8212Epoch4/10195/195[==============================]-133s686ms/step-loss:0.1739-accuracy:0.9383-val_loss:0.5322-val_accuracy:0.8174{'loss':[0.4700811505317688,0.2886970639228821,0.22640255093574524,0.17389899492263794],'accuracy':[0.7642627954483032,0.879647433757782,0.9132211804389954,0.9382612109184265],'val_loss':[0.36468181014060974,0.37518611550331116,0.45546984672546387,0.5322400331497192],'val_accuracy':[0.8405448794364929,0.834455132484436,0.8211939334869385,0.8174278736114502]}195/195[==============================]-37s190ms/step-loss:0.5322-accuracy:0.8174[0.5322400331497192,0.8174278736114502]训练模型,控制台输出如下:6.2.4案例:基于LSTM的文本情感分析实战36Bi-LSTMKeras库中同样对Bi-LSTM实现了较好的封装。代码如下:6.2.4案例:基于LSTM的文本情感分析实战37classLSTM(tf.keras.Model):def__init__(self,units):"""
初始化函数
:paramunits:隐藏层单元个数
"""super(LSTM,self).__init__()#词嵌入层将文本序列转换成特征序列
self.embedding=layers.Embedding(total_words,embedding_len,input_length=max_review_len)#定义第1层Bi-LSTM返回序列输出
self.lstm1=layers.Bidirectional(layers.LSTM(units=units,dropout=0.2,return_sequences=True))#Bi-LSTM返回最后一时刻输出
self.lstm2=layers.Bidirectional(layers.LSTM(units=units,dropout=0.2,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2027届浙江省宁波市四校化学九年级第一学期期中质量跟踪监视模拟试题含解析
- 浙江省温州市南浦实验中学2027届九年级物理第一学期期末经典模拟试题含解析
- 2027届广东省汕头市澄海区化学九上期中学业质量监测试题含解析
- 2027届安徽省合肥市蜀山区物理九上期末学业水平测试试题含解析
- 2027届山东省济南商河县联考化学九年级第一学期期末学业质量监测模拟试题含解析
- 2026中国智能扫地机器人电池供应现状与技术发展趋势报告
- 2026叶黄素酯在化妆品领域的功效验证与市场接受度报告
- 2027届浙江省金华市婺城区九上化学期末考试试题含解析
- 2026汽车行业市场深度查询及新能源趋势与产业升级研究报告
- 2026职业联赛装备新规对防护设备技术创新倒逼效应研究报告
- 湖南长沙水业集团有限公司招聘考试真题2025
- 建筑工程项目质量安全管理手册
- 预防安全踩踏事故课件
- 阿尔茨海默病BPSD多学科协作管理方案
- 《2026年》药品检验岗位高频面试题包含详细解答
- 2025年山东医疗卫生招聘笔试真题
- 2026广西崇左市招聘县级政府统计机构统计协管员(协统员)85人重点基础提升(共500题)附带答案详解
- 青少年高血压病防治知识课件
- 第五单元 平移、旋转和轴对称(单元测试提高卷)-2025-2026学年三年级数学上学期(苏教版)含答案
- 2026陕西省森林资源管理局局属企业招聘(55人)参考考试试题及答案解析
- 陶土砖幕墙工程施工方案
评论
0/150
提交评论