做网站来钱快,商标查询软件,哪个专业学习网站建设,长沙商城网站制作【作者主页】Francek Chen 【专栏介绍】⌈⌈⌈PyTorch深度学习⌋⌋⌋ 深度学习 (DL, Deep Learning) 特指基于深层神经网络模型和方法的机器学习。它是在统计机器学习、人工神经网络等算法模型基础上#xff0c;结合当代大数据和大算力的发展而发展出来的。深度学习最重要的技…【作者主页】Francek Chen【专栏介绍】⌈ ⌈⌈PyTorch深度学习⌋ ⌋⌋深度学习 (DL, Deep Learning) 特指基于深层神经网络模型和方法的机器学习。它是在统计机器学习、人工神经网络等算法模型基础上结合当代大数据和大算力的发展而发展出来的。深度学习最重要的技术特征是具有自动提取特征的能力。神经网络算法、算力和数据是开展深度学习的三要素。深度学习在计算机视觉、自然语言处理、多模态数据分析、科学探索等领域都取得了很多成果。本专栏介绍基于PyTorch的深度学习算法实现。【GitCode】专栏资源保存在我的GitCode仓库https://gitcode.com/Morse_Chen/PyTorch_deep_learning。文章目录一、使用循环神经网络表示单个文本二、加载预训练的词向量三、训练和评估模型小结与词相似度和类比任务一样我们也可以将预先训练的词向量应用于情感分析。由于情感分析及数据集中的IMDb评论数据集不是很大使用在大规模语料库上预训练的文本表示可以减少模型的过拟合。作为图1中所示的具体示例我们将使用预训练的GloVe模型来表示每个词元并将这些词元表示送入多层双向循环神经网络以获得文本序列表示该文本序列表示将被转换为情感分析输出。对于相同的下游应用我们稍后将考虑不同的架构选择。图1 将GloVe送入基于循环神经网络的架构进行情感分析importtorchfromtorchimportnnfromd2limporttorchasd2l batch_size64train_iter,test_iter,vocabd2l.load_data_imdb(batch_size)一、使用循环神经网络表示单个文本在文本分类任务如情感分析中可变长度的文本序列将被转换为固定长度的类别。在下面的BiRNN类中虽然文本序列的每个词元经由嵌入层self.embedding获得其单独的预训练GloVe表示但是整个序列由双向循环神经网络self.encoder编码。更具体地说双向长短期记忆网络在初始和最终时间步的隐状态在最后一层被连结起来作为文本序列的表示。然后通过一个具有两个输出“积极”和“消极”的全连接层self.decoder将此单一文本表示转换为输出类别。classBiRNN(nn.Module):def__init__(self,vocab_size,embed_size,num_hiddens,num_layers,**kwargs):super(BiRNN,self).__init__(**kwargs)self.embeddingnn.Embedding(vocab_size,embed_size)# 将bidirectional设置为True以获取双向循环神经网络self.encodernn.LSTM(embed_size,num_hiddens,num_layersnum_layers,bidirectionalTrue)self.decodernn.Linear(4*num_hiddens,2)defforward(self,inputs):# inputs的形状是批量大小时间步数# 因为长短期记忆网络要求其输入的第一个维度是时间维# 所以在获得词元表示之前输入会被转置。# 输出形状为时间步数批量大小词向量维度embeddingsself.embedding(inputs.T)self.encoder.flatten_parameters()# 返回上一个隐藏层在不同时间步的隐状态# outputs的形状是时间步数批量大小2*隐藏单元数outputs,_self.encoder(embeddings)# 连结初始和最终时间步的隐状态作为全连接层的输入# 其形状为批量大小4*隐藏单元数encodingtorch.cat((outputs[0],outputs[-1]),dim1)outsself.decoder(encoding)returnouts让我们构造一个具有两个隐藏层的双向循环神经网络来表示单个文本以进行情感分析。embed_size,num_hiddens,num_layers100,100,2devicesd2l.try_all_gpus()netBiRNN(len(vocab),embed_size,num_hiddens,num_layers)definit_weights(m):iftype(m)nn.Linear:nn.init.xavier_uniform_(m.weight)iftype(m)nn.LSTM:forparaminm._flat_weights_names:ifweightinparam:nn.init.xavier_uniform_(m._parameters[param])net.apply(init_weights);二、加载预训练的词向量下面我们为词表中的单词加载预训练的100维需要与embed_size一致的GloVe嵌入。glove_embeddingd2l.TokenEmbedding(glove.6b.100d)打印词表中所有词元向量的形状。embedsglove_embedding[vocab.idx_to_token]embeds.shape我们使用这些预训练的词向量来表示评论中的词元并且在训练期间不要更新这些向量。net.embedding.weight.data.copy_(embeds)net.embedding.weight.requires_gradFalse三、训练和评估模型现在我们可以训练双向循环神经网络进行情感分析。lr,num_epochs0.01,5trainertorch.optim.Adam(net.parameters(),lrlr)lossnn.CrossEntropyLoss(reductionnone)d2l.train_ch13(net,train_iter,test_iter,loss,trainer,num_epochs,devices)我们定义以下函数来使用训练好的模型net预测文本序列的情感。#savedefpredict_sentiment(net,vocab,sequence):预测文本序列的情感sequencetorch.tensor(vocab[sequence.split()],deviced2l.try_gpu())labeltorch.argmax(net(sequence.reshape(1,-1)),dim1)returnpositiveiflabel1elsenegative最后让我们使用训练好的模型对两个简单的句子进行情感预测。predict_sentiment(net,vocab,this movie is so great)predict_sentiment(net,vocab,this movie is so bad)小结预训练的词向量可以表示文本序列中的各个词元。双向循环神经网络可以表示文本序列。例如通过连结初始和最终时间步的隐状态可以使用全连接的层将该单个文本表示转换为类别。