TextRNN pytorch 面向对象实践

pytorch自然语言处理基础模型之四:TextRNN 1、模型原理        RNN(Recurrent Neural Network)是一类用于处理序列数据的神经网络。首先我们要明确什么是序列数据,摘取百度百科词条:时间序列数据是指在不同时间点上收集到的数据,这类数据反映了某一事物、现象等随时间的变化状态或程度。这是时间序列数据的定义,当然这里也可以不是时间,比如文字序列,但总归序列数据有一个特点——后面... 阅读详情

前言

首先吐槽一下 ,研究机器学习深度学习的时候 发现 各路大神 都是面向过程编程 ,非常简单的东西看的也是云里雾里,代码面向对象编程 很多东西一看就能看明白, 希望借此能抛砖引玉。
另外命名也喜欢用 驼峰命名法

Embedding

理解 textRNN 之前 首先得理解 Embedding ,把这个东西了解了 其他的东西 就是 RNN。

一般处理 文档的时候 遵循下面几步:

  1. 将文档变成 [ [文档1] , [ 文档2] … ] 这种 list 结构 每一个文档就是一个list

  2. 将list 文档切割成单词形式 [ [“我”,“爱” ,“小喵咪”] ,[“我”,“吃” ,“西瓜” ] … ] 一般用jieba 分词

  3. 去停顿词 像 ! , 啊 … 这样的标点符号 语气词 没有实际意义

  4. 将所有的单词 按照词频记录 比如: { “我": 1800 , “爱”:1500} ==>词频排序{ “我”:1 ,“爱”:2 ,“吃”: 3 ,“西瓜”:4,“小喵咪”:5 }

  5. 将所有的文档中的单词 按照 这个词频顺序变成数字 [“我”,“爱” ,“小喵咪”]==>[1, 2, 5] ,[“我”,“吃” ,“西瓜” ] ==>[1,3,4]

  6. 准备词向量 我们假设这个词向量 A 的 size = [ 100,300] , 这个词向量 获取:
    1,可以从别人预训练好的直接获取 比如
    搜狗
    腾讯
    2,用 genisim word2vect 本文采用的是这种 因为数据量小 直接用这种方式比较简单

  7. Embedding 就是用第5步得到的 数字向量 B 去取第6步的真正词向量A 比如 nn.Embedding([ 1,2,5] ) 就是 把 A 的第 1,2,5 行的向量取出来 。

  8. Embedding 出来的词向量 参与 RNN 等各种神经网络计算 。 后面的步骤就和图像处理一样了。如果对RNN 不太理解 移步RNN实战

所以可以看到文档的深度学习计算 就是处理数据比较麻烦点, 要将数据变成特有的格式。明白了上述步骤就可以写代码运算了。

面向对象编程实现 TextRNN

准备数据

我从网上找到一个 ch_auto.csv数据集

在这里插入图片描述

然后切分成 三份:

  1. train.tsv 训练集
  2. test.tsv 测试集
  3. dev.tsv 验证集

数据格式:

在这里插入图片描述

导入库:

import   pandas  as  pd

import   jieba
from gensim import models

from gensim.models.doc2vec import Doc2Vec, TaggedDocument

import  gensim

import  numpy  as np

import  os
import  torch

实现数据集转换:

'''
后面训练 和测试的 数据格式
'''
class  Batch(object):
    def __init__(self,label,text):
        self.text =torch.LongTensor(text)
        self.label=torch.LongTensor([int(x) for x in  label])



class  DataSet(object):

    def __init__(self):
        self.UNK, self.PAD = '<UNK>', '<PAD>'  # 未知字,padding符号

    '''
    # 将 csv 文件 变成 [  [ 文档1] ,[ 文档2]]
    '''
    def  ReadCSV(self,path):
         csvFile=  pd.read_csv(path,usecols=[1,2],encoding="utf-8")

         labelList  = csvFile.values[:,0].tolist()
         valueList = csvFile.values[:,1].tolist()

         print( labelList[0],valueList[0])

         print(len(valueList))


         return   labelList,valueList


    '''
    将tsv 文件变成  [  ["我","爱" ,"小喵咪"]  ,["我","吃" ,"西瓜" ] ... ]
    '''
    def ReadTSV(self,path):

        label=[]
        text=[]
        with  open(path,"r",encoding="utf-8") as fhandle:
           line=  fhandle.readline()

           while line :
               line = fhandle.readline()
               lines= line.split("\t")

               if len(lines) != 3:
                   continue

               label.append(lines[1])

               tmpLine= [word  for  word in jieba.cut(lines[2])]


               #print(lines)
               #print("line=",len(lines),lines[1],tmpLine)

               text.append(tmpLine)

        return  label,text


    '''
    将数据[[],[]]切割成Batch 块 [ batch1,batch2]
    '''
    def  SpliteData(self,text,label,batchSize):
         allLen = len(text)
         step = int(allLen/batchSize)

         spliteText=[]

         for i in  range(0,step):
             spliteText.append(Batch(label[i:i+batchSize] ,text[i:i+batchSize]))


         return  spliteText




    '''
    将解析tsv文件
    数据变成等长的 list [ [1, 2, 5],  [1, 2, 4]  ...]
    切割成[ batch1,batch2]
    '''
    def BuidBatch(self,batchSize,vocabDict,sentenSize=32,
                  testPath="./data/test.tsv",valPath="./data/dev.tsv",trainPath="./data/train.tsv"):

        testLabel,testText = self.ReadTSV(testPath)
        valLabel,valText  = self.ReadTSV(valPath)
        trainLabel,trainText = self.ReadTSV(trainPath)

        testText = self.Doc2Embedding(testText,vocabDict,sentenSize)
        valText = self.Doc2Embedding(valText,vocabDict,sentenSize)
        trainText = self.Doc2Embedding(trainText, vocabDict, sentenSize)



        testIter = self.SpliteData(label=testLabel,text= testText,batchSize=batchSize)

        valIter= self.SpliteData(label=valLabel,text= valText,batchSize=batchSize)
        trainIter = self.SpliteData(label=trainLabel, text=trainText, batchSize=batchSize)

        return  testIter,valIter,trainIter






    '''
    splitTexts =[["xx","xxx"],["xx","xxx"]]

    vocabDict=[('空间', index1), ('很', index2),]
    '''
    def  BuildVocabDict(self,splitTexts,minFreq=1):
          vocabDict={}
          for   setences in   splitTexts:
              #print("setence==",setences)
              for word in  setences:

                  vocabDict[word] = vocabDict.get(word,0)+1

          vocabList = sorted([_ for _ in vocabDict.items() if _[1] >= minFreq], key=lambda x: x[1], reverse=True)

          print("vocabList==",vocabList)
          vocabDict = {word_count[0]: idx for idx, word_count in enumerate(vocabList)}

          vocabDict.update({self.UNK: len(vocabDict),self.PAD: len(vocabDict) + 1})

          print("vocabDict size",len(vocabDict))

          return   vocabDict






    #将词向量存到硬盘
    def  Word2Vect(self, docments,vocabDict,embSize=300,prePath="./data/"):
        model = gensim.models.Word2Vec(docments, sg=1, size=embSize, window=5, min_count=1, negative=3, sample=0.001, hs=1,
                                       workers=4)

        #model.wv.save_word2vec_format("word300.txt",binary=False)


        wordEmbding=[]
        for   k,v in  vocabDict.items():

            #print("k,",k )
            if(model.wv.__contains__(k)):
                tmpVect = model.wv.get_vector(k)
                #print("model==",tmpVect)
                wordEmbding.append(tmpVect)
            else:
                embedding = np.random.uniform(0, 1, embSize)
                wordEmbding.append(embedding)
                print("not contain key==",k)



        fileName = "{}word{}.npz".format(prePath,embSize)
        if not os.path.exists(fileName):
            fd = open(fileName,"w",encoding="utf-8")
            fd.close()

        np.savez(fileName,vocabDict=vocabDict,wordEmbding=wordEmbding)


        return  model

    #加载词向量
    def  LoadWordEmbding(self,path="./data/word300.npz"):

        savNpz=  np.load(path,allow_pickle=True)
        embedding_pretrained =  savNpz["wordEmbding"].astype('float32')
        vocabDict = savNpz["vocabDict"].item()

        print("embding===",len(embedding_pretrained))
        print("embding dict=",vocabDict)

        return  vocabDict, embedding_pretrained

    #建立词向量
    def  BuildWordVect(self,embSize):

        if not os.path.exists("./data/word300.npz"):
            label, text = self.ReadCSV("./data/ch_auto.csv")

            splitTexts = [[word for word in jieba.cut(setences)] for setences in text]

            print(splitTexts[0])

            vocabDict = self.BuildVocabDict(splitTexts)

            self.Word2Vect(splitTexts, vocabDict, embSize=embSize)

配置参数

class   RNNConfig():
    def __init__(self,vocabSize,outputSize=2,batchSize=50,embedDimention=300,
                 hiddenSize=64,hiddenLayer=3,dropKeep=0.1,bidirectional=True,
                 lr=0.001,cuda=False,saveDir="./data/snap/",
                 logInteval=5,epochs= 3 ,evalInteval=-1,preTrain=True,embdingVect=None
                 ):

        self.vocabSize= vocabSize                    # 总词数 多少个
        self.batchSize = batchSize                   #一次性传入多少数据
        self.embedDimention= embedDimention            #词向量维度
        self.hiddenSize = hiddenSize                      # lstm隐藏层大小
        self.hiddenLayer= hiddenLayer                  # lstm层数
        self.dropKeep= dropKeep                       # 随机失活
        self.bidirectional= bidirectional             # 是否双向
        self.outputSize=outputSize                    #输出大小
        self.lr= lr                                  #学习率
        self.cuda= cuda                               #是否用GPU
        self.saveDir = saveDir                        #保存快照的位置
        self.logInteval =logInteval                    #隔多少步 打一个log
        self.epochs= epochs                           # 循环多少次
        self.evalInteval = evalInteval                #隔多少步 评估一下保存快照
        self.preTrain= preTrain
        self.embdingVect = embdingVect

TextRNN 实现

class TextRNN(nn.Module):
    def __init__(self, config):
        super(TextRNN, self).__init__()
        self.config = config

        if  config.preTrain:
            # self.embeddings = nn.Embedding(self.config.vocabSize, self.config.embedDimention)
            #
            # self.embeddings.weight.data.copy_(config.embdingVect)
            self.embeddings = nn.Embedding.from_pretrained(config.embdingVect,freeze=False)

            print("pr train")
        else:

            # Embedding 层, 随机初始化

            self.embeddings = nn.Embedding(self.config.vocabSize, self.config.embedDimention)

        # LSTM 层
        '''
        input_size:输入特征的数目
        hidden_size:隐层的特征数目
        num_layers:这个是模型集成的LSTM的个数 记住这里是模型中有多少个LSTM摞起来 一般默认就1个
        #batch_first: 输入数据的size为[batch_size, time_step, input_size]还是[time_step, batch_size, input_size]
       '''
        self.lstm = nn.LSTM(input_size=self.config.embedDimention,
                            hidden_size=self.config.hiddenSize,
                            num_layers=self.config.hiddenLayer,
                            dropout=self.config.dropKeep,
                            bidirectional=self.config.bidirectional,
                            batch_first=True
                            )
    

        # dropout
        self.dropout = nn.Dropout(self.config.dropKeep)

        outSize= self.config.hiddenSize   * ( 2 if  self.config.bidirectional  else 1 ) #*self.config.hiddenLayer

        print("outSize=",outSize)
        # 全连接层
        self.fc = nn.Linear(  # 就是 hn、cn 的输出然后去掉 batch_size
            outSize,
            self.config.outputSize
        )

        # softmax 层
        self.softmax = nn.Softmax(dim=1)

        # for  param  in  self.parameters():
        #      print("parm==",param)

        self.optimizer= torch.optim.Adam(self.parameters(),config.lr)
        self.lossFunc = nn.CrossEntropyLoss()








    def RunModel(self,x):
        # x.shape = (max_sen_len, batch_size)

        #x = torch.LongTensor(x)
        print("x:",x.size(),x[0])

        embedded_sent = self.embeddings(x)  # (max_sen_len = 30, batch_size=64, embed_size=300)

        embedded_sent = self.dropout(embedded_sent)

        print("embedded_sent==",embedded_sent.size())



        # LSTM
        lstm_out, (h_n, c_n) = self.lstm(embedded_sent,None)

        # dropout
        final_feature_map = self.dropout(h_n)  # (num_layers * num_directions, batch_size, hidden_size)

        print("final_feature_map:",final_feature_map.size())



        final_feature_map = torch.cat((final_feature_map[-1, :, :] ,final_feature_map[-2, :, :]), dim=1)

        print("final_feature_map22:", final_feature_map.size())
        # 全连接
        final_out = self.fc(final_feature_map)
        #final_out = self.softmax(final_out)


        return final_out # 返回 softmax 的结果



    def forward(self, x):
        return  self.RunModel(x)


    def  Refrush(self,predictY,targetY):
        self.optimizer.zero_grad()
        loss= self.lossFunc(predictY,targetY)
        loss.backward()
        self.optimizer.step()
        print("loss:",loss.data.item())

        return  loss


    def ShowRate(self,prdictY,targetY):
        result = torch.argmax(prdictY,dim=1)
        print("rate==",prdictY[0:5],result[0:5],targetY[0:5])
        corrects = (result == targetY).sum().item()

        accuracy = corrects  / self.config.batchSize
        print ("correct:",corrects,"acc:",accuracy)

    def SaveMode(self,saveDir,step):
        if not  os.path.exists(saveDir):
            os.mkdir(saveDir)
        savePath = "{}Steps_{}.pt".format(saveDir,step)
        torch.save(self.state_dict(),savePath)

    def RunTrain(self,trainIter,evalIter):

         step =0
         bestAcc = 0
         self.train()
         for   epoch  in  range (1,self.config.epochs+1):
             for batch in  trainIter:
                 feature, target = batch.text, batch.label


                 if self.config.cuda:
                     feature,target = feature.cuda(),target.cuda()
                 predictY = self.RunModel(feature)
                 print("predict Y:",predictY.size(),target.size())
                 loss =self.Refrush(predictY,target)

                 if loss.data.item() < 0.0001:
                     break

                 step += 1
                 if step % self.config.logInteval ==0:
                     self.ShowRate(predictY, target)

                 if  self.config.evalInteval >0  and step % self.config.evalInteval ==0  :
                     devAcc= self.Eval(evalIter)
                     if devAcc > bestAcc:
                         bestAcc = devAcc
                         #self.SaveMode(self.config.saveDir,step)
                     self.train()




    def  Eval(self,dataIter):
        self.eval()
        avgLoss =0.0
        corrects=0.0
        accuracy=0.0
        for batch in dataIter:
            feature, target = batch.text, batch.label
            #feature.data.t_()

            if self.config.cuda:
                feature, target = feature.cuda(), target.cuda()

            predictY = self.RunModel(feature)

            loss = F.cross_entropy(predictY,target)
            avgLoss += loss.item()
            #result = torch.max(predictY, 1)[1]


            result = torch.argmax(predictY, dim=1)
            print("rate==", predictY[0:5], result[0:5], target[0:5])
            correct = (result == target).sum().item()
            acc= correct / self.config.batchSize
            accuracy += acc
            print("correct:", correct, "acc:", acc)

        size =len(dataIter)
        avgLoss /= size

        accuracy =  accuracy /size


        print("eval loss:{} acc:{}".format(avgLoss,accuracy))
        return  accuracy

使用TextRNN训练 和测试数据

import torch
import torch.nn.functional as F
from torch import nn

import os

#一次性传入的文档数量
BATHSIZE = 50
#每个句子的统一长度
SentenceLength = 32
#词向量维度
EmbdingDemition=300


if __name__ == '__main__':

    dataSet = DataSet()

    ## 训练词向量
    dataSet.BuildWordVect(EmbdingDemition)


    ##加载词向量
    vocabDict,wordVect= dataSet.LoadWordEmbding()

    ## 准备训练数据
    trainIter, valIter, testIter =dataSet.BuidBatch(BATHSIZE,vocabDict,sentenSize=SentenceLength)


    ## 配置文件
    config = RNNConfig(len(vocabDict),embedDimention=EmbdingDemition,batchSize=BATHSIZE,
                       preTrain=True,embdingVect= torch.tensor(wordVect)
                       )

    ## 初始化 RNN
    myRNN= TextRNN(config)

    ## 开始训练
    myRNN.RunTrain(trainIter,valIter)

    ## 开始测试
    myRNN.Eval(testIter)

数据集下载:

将数据下载 ,建立文件夹 data 放入其中。

链接:https://pan.baidu.com/s/1u6xhcLqI6NWZU1Qh8h7imA
提取码:6w30

Pytorch实现中文文本分类任务(Bert,ERNIE,TextCNN,TextRNN,FastText,TextRCNN,BiLSTM_Attention, DPCNN, Transformer) Github项目地址:https://github.com/JackHCC/Chinese-Text-Classification-PyTorch中文文本分类,基于pytorch,开箱即用。神经网络模型:TextCNN,TextRNN,FastText,TextRCNN,BiLSTM_Attention, DPCNN, Transformer预训练模型:Bert,ERNIE模型介绍、数据流动过程:参考数据以字为单位输入模型,预训练词向量使用 搜狗新闻 Word+Character 300d,点这里下载参考: 阅读详情

相关推荐

pytorch搭建TextRNN做文本分类,TextRNN加Attention做对比

数据集来源:天池零基础入门NLP - 新闻文本分类。 完整工程代码点击这里。 数据集比较庞大,14个类别,每个文本平均长度为900。一开始就是搭建了很简单的RNN,然后出问题了,模型不收敛,后来看到其他大佬分享的baseline,基本都是把文本截断的,截断到250左右。 于是我截断了下,模型有点收敛了,但是跑了几十个epoch还是0.3的精度上不去。。。。 然后又找了别人 的TextRNN模型框架,发现了有个很细微的区别,别人的Lstm里面加了dropout,我就有点儿懵,这不是防过拟合的吗?这个模型都还没

weixin_43918046的博客 3190

TextRNN pytorch实现

Recurrent Neural Networks RNN用来处理序列数据 具有记忆能力 Simple RNN hth_tht​:状态矩阵,不断更新(h_0: the;h_1: the cat…) 只有一个参数矩阵A:随机初始化,然后用训练数据来学习A 为什么需要tanh激活函数:如果不激活可能会出现梯度消失或者梯度爆炸。 LSTM LSTM可以避免梯度消失的问题 LSTM的记忆力要比SimpleRNN强 结构图: LSTM有四个参数矩阵 传送带(conveyor bert):过去

m0_50896529的博客 836

基于TextRNN实现情感短文本分类任务

文本分类任务中,CNN可以用来提取句子中类似N-Gram的关键信息,适合短句子文本。TextRNN擅长捕获更长的序列信息。具体到文本分类任务中,从某种意义上可以理解为可以捕获变长、单向的N-Gram信息(Bi-LSTM可以是双向)。

优快云 精品推荐 1789

NLP实战:Pytorch实现7大经典深度学习中文文本分类-TextCNN+TextRNN+FastText+TextRCNN+TextRNN_Attention+DPCNN+Transformer

本文以Pytorch为框架,实现了7种经典的深度学习中文文本分类模型,包括TextCNN、TextRNN、FastText、TextRCNN、TextRNN_Attention、DPCNN和Transformer。通过这篇文章,读者可以了解到各种深度学习中文文本分类模型的实现细节和性能表现。本文不仅为学术研究者提供了参考,也为开发者和实践者提供了可复用的代码和实验指南,帮助他们在中文文本分类任务中取得更好的结果。

小胡说人工智能的博客 1万+

Pytorch 实现文本分类

文本分类的标准代码,Pytorch实现 数据集Dataset - IMDB - SST - Trec ### 模型 - FastText - BasicCNN (KimCNN,MultiLayerCNN, Multi-perspective CNN) - InceptionCNN - LSTM (BILSTM, StackLSTM) - LSTM with Attention (Self Attention / Quantum Attention) - Hybrids between CNN and RNN (RCNN, C-LSTM) - Transformer - Attention is all you need - ConS2S - Capsule - Quantum-inspired NN

comfyui从入门到精通二:提示词规则详解

《AI绘画提示词使用全指南》摘要: 本文系统解析AI绘画提示词的核心规则与实用技巧。关键点包括:1) 空格与下划线的本质差异,webui会自动转换但comfyui保留原格式;2) 数字与单词表达(如1girl/one girl)会导致风格变化;3) 三种权重控制方式(数值标注、括号嵌套、位置效应),其中数值标注最直观有效;4) 位置衰减公式揭示提示词排序对效果的影响权重。同时指出当前AI绘画仍存在角色一致性等更复杂的技术瓶颈。全文通过多组对比实验,为创作者提供从基础语法到高阶控制的完整解决方案。

ScottePerk的博客 1926

文本分类系列(2):TextRNN及其pytorch实现

[文本分类系列(1):TextCNN及其pytorch实现] (https://blog.youkuaiyun.com/u014514939/article/details/88834548) TextRNN 尽管TextCNN能够在很多任务里面能有不错的表现,但CNN有个最大问题是固定 filter_size 的视野,一方面无法建模更长的序列信息,另一方面 filter_size 的超参调节也很繁琐。CNN...

u014514939的博客 6606

【SystemVerilog项目实践】4.AHB-SRAMC(验证计划)

验证计划

托马斯的博客 3660

TextCNN网络详解(pytorch实现文本分类)

textcnn网络在NLP文档分类任务上有较好的性能,让我们来了解一个TextCNN的网络结构及pytorch代码实现

weixin_64017116的博客 2058

别再为倍福EL6021/EL6022的RS485接线头疼了!手把手教你硬件跳线与软件配置(附Modbus RTU主站例程)

本文详细解析了倍福EL6021/EL6022模块的RS485硬件跳线与软件配置方法,包括Modbus RTU主站编程实战。从端子定义、跳线操作到TwinCAT 3环境设置,提供完整的通信例程和故障排查技巧,帮助工程师快速解决工业现场通信问题。

weixin_30634661的博客 590

Cisco三层交换机的详细配置

** 本文适用于新手小白以及微微基础的同学来用于参考,实验是在Cisco Packet Tracer Student 进行,实验最终效果如图所示,所有命令配置与图中的一致。 使用到的机器型号为:五台电脑,一台服务器,三个普通交换机(2960型号),一个三层交换机(3560-24PS),两台普通服务器(2811) 文章目录一、什么是三层交换机二、配置交换机步骤1.配置二层交换机2.配置三层交换机3.配置两台路由器以及最后一台电脑 一、什么是三层交换机 1.三层交换机 = 三层路由+二层交换机 2.工作在

真正的大师,永远都怀着一颗学徒的心。 4万+

中文文本分类(基于Pytorch)

我从THUCNews中抽取了20万条新闻标题,文本长度在20到30之间。一共10个类别,每类2万条。搜狗新闻 Word+Character 300d。类别:财经、房产、股票、教育、科技、社会、时政、体育、游戏、娱乐。

sikh_0529的博客 1万+

使用podman 容器化安装DIFY

本文阐述了使用podman容器化安装DIFY的过程

wengad的博客 1901

TextRNN的PyTorch实现

本文介绍一下如何使用PyTorch复现TextRNN,实现预测一句话的下一个词 参考这篇论文Finding Structure in Time(1990),如果你对RNN有一定的了解,实际上不用看,仔细看我代码如何实现即可。如果你对RNN不太了解,请仔细阅读我这篇文章RNN Layer,结合PyTorch讲的很详细 现在问题的背景是,我有n句话,每句话都由且仅由3个单词组成。我要做的是,将每句话的前两个单词作为输入,最后一词作为输出,训练一个RNN模型 导库 ''' code by Tae Hwan J

mathor的博客 1801

scannet数据集下载文件

scannet数据集下载文件 由于大家会申请scannet数据集,审批比较慢,我将下载的文件里面的内容贴出来,大家可以复制放进py文件中,运行就可以下载 ps:别再私信要数据集了,这个自己下载,如果光三维数据的话,还是很快的,当然如果路由器翻了墙的话,下载会更快。 #!/usr/bin/env python # Downloads ScanNet public data release # Run with ./download-scannet.py (or python download-scannet.

weixin_40766438的博客 9232

vCenter6.7证书过期导致503报错的全面修复指南:从STS证书更新到SSL信任修复

本文详细解析了VMware vCenter 6.7因STS证书过期导致503服务不可用错误的根本原因,并提供了从诊断、更新STS证书到修复SSL信任链的完整解决方案。通过命令行工具检查证书状态,使用官方脚本更新过期STS证书,并利用lsdoctor工具修复深层SSL信任问题,最终指导用户使用certificate-manager彻底重置所有证书,帮助管理员快速恢复vCenter服务。

pz890123的博客 1293

pytorch中textrnn对应的结构理解

首先贴出一张经典的textrnn的流程图 对应的textrnn的结构如下: ~~~python import torch import torch.nn as nn rnn = nn.RNN(10,20,2) #10为输入x的特征大小,20为隐藏层h的特征大小 #2为循环层的数量(RNN中重复的部分) #input_size = 10,hidden_size = 20,num_layers = 2 input = torch.randn(5,3,10) h0 = torch.randn(2,3,20

小姑仔的博客 1045

OpenClaw实战系列07:定时任务与自动化工作流实战——让AI从“被动响应”到“主动执行”

通过本文的学习,你已经将 OpenClaw 从“被动应答”升级为“主动执行”的自动化引擎。定时简报:每天8点自动生成行业简报推送飞书/钉钉GitHub事件触发:PR合并自动触发Code ReviewAgent间协作:数据采集→分析→报告全自动流水线系统监控:定时检查服务器状态,异常自动告警核心收获掌握 OpenClaw 内置 Cron 系统的三种调度模式学会 Webhook 配置和事件触发机制理解 Agent 间通信的两种方式(sessions_spawn / sessions_send)

PeterPan的博客 691

文本分类TextRNN_Att模型(pytorch实现)

TextRNN_Att模型在TextRNN的基础上添加了Attention模块 使提取到的特征更具针对性

weixin_64017116的博客 1380

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

NLP实战二:Pytorch实现TextRNN文本分类

向AI转型的程序员都关注公众号机器学习AI算法工程中文数据集我从THUCNews中抽取了20万条新闻标题,已上传至github,文本长度在20到30之间。一共10个类别,每类2万条。类别:财经、房产、股票、教育、科技、社会、时政、体育、游戏、娱乐。数据集划分:数据集数据量训练集18万验证集1万测试集1万更换自己的数据集如果用字,按照我数据集的格式来格式化你的数据。如果用词,提前分好词,词之间用空...

datayx的文章 169

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

pytorch搭建TextRNN与使用案例

文章目录生成训练数据构建TextCNN开始训练构建训练数据集训练三件套:模型,loss,优化器开始训练完整代码 生成训练数据 这里使用随机数生成训练数据,大家在自己写的时候只需要替换这里就OK了: def get_total_train_data(word_embedding_size, class_count): """得到全部的训练数据,这里需要替换成自己的数据""" import numpy as np x_train = torch.Tensor(np.random.rand

呆萌的代Ma 680

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

TextRNN 模型实现微博文本情感分类

本文通过对一段代码的详细解析,展示了基于 PyTorch 和 TextRNN 实现微博文本情感分类的全过程。从环境准备、数据处理,到模型构建与训练,每个环节都紧密相连。在实际应用中,我们可以进一步优化模型结构,如引入注意力机制;调整超参数;尝试不同的预训练词向量或预训练模型,以提升分类准确率。希望本文能为大家在 NLP 领域的学习和实践提供帮助,也欢迎大家在评论区交流探讨。

ycy200377的博客 971

PyTorch实战:TextCNN与TextRNN(LSTM)文本分类模型详解与对比

文本分类是自然语言处理(NLP)的基础任务,其核心目标是将文本自动划分到预定义的类别中。其原理在于通过机器学习模型学习文本特征与类别标签之间的映射关系。这项技术的价值在于能够自动化处理海量文本,极大地提升了舆情监控、情感分析和内容审核等场景的效率。在工程实践中,选择合适的模型架构是关键。卷积神经网络(CNN)擅长捕捉局部特征,而循环神经网络(RNN)及其变体LSTM则能更好地建模序列的长期依赖关系。本文聚焦于**TextCNN**和**TextRNN(LSTM)** 这两个经典模型,通过PyTorch实战,

weixin_30617695的博客 394

# 深入探索中文情感分析:基于TextRNN的实战之旅

通过以上步骤,我们成功构建了一个基于TextRNN的中文情感分析模型。项目中涉及的关键技术包括数据预处理、预训练词嵌入的使用、模型构建与训练、以及性能评估。TextRNN作为一种经典的循环神经网络架构,能够有效地捕捉文本中的序列信息,为情感分析任务提供了强大的支持。然而,情感分析是一个复杂且不断发展的领域。探索更先进的模型架构:例如Transformer、BERT等,这些模型在处理长文本和复杂语义关系方面具有显著优势。数据增强。

www_pp_的博客 1572
上一篇: Anaconda 安装找不到的包
下一篇: Hadoop 分布式存储系统介绍
ithinking110
博客等级 码龄14年 54粉丝 52原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值