Python——pytorch进行文本分类

一.词袋模型

引入背景:文本的长度是不固定的,而神经网络所需要的输入个数是固定的,而磁袋模型就可以很好地解决这一问题。(与顺序无关,就像东西放入袋中)

已知条件:N句话

做法

        输入层的数目:N句话总共出现的词数(不重复)。

        向量个数(训练样本数):N

        每个位的值:这个词在这句话的频率(该词出现次数除以该句话总词数)。     

  二.构造一个分类器

model=nn.Sequential(
    nn.Linear(7139,10),
    nn.ReLU(),
    nn.Linear(10,2),
    nn.LogSoftmax(dim=1),
)

  三.损失函数和优化器

#损失函数
cost=torch.nn.NLLLoss()

#优化器Adam优化算法,相比SGD可以自动调节学习率
optimizer=torch.optim.Adam(model.parameters,lr=0.01)

records=[]  #循环10个Epoch
losses=[]

for epoch in range(10):
    for i,data in enumerate(train_data,train_label):  #在每一个epoch中对训练数据进行分批循环
        x,y=data  #读入一批的数据
        #调整为标准的数据格式
        x=Variable(torch.FloatTensor(x).view(1,-1))
        y=Variable(torch.FloatTensor(np.array([y])))
        optimizer.zero_grad()

        #模型预测
        predict=model(x)
        loss=cost(predict,y)
        

        loss.backward()
        optimizer.step()

        if i%3000==0:  #每隔3000个batch,就在校验集上跑一遍模型
            val_losses=[]
            right=[]
            for i,val in enumerate(zip(vaild_data,vaild_label)):
                x,y=val
                x=Variable(torch.FloatTensor(x).view(-1,1))
                y=Variable(torch.LongTensor(np.array([y])))


                predict=model(x)

                right=rightness(predict,y)
                rights.append(right)
                loss=cos(predict,y)
                val_losses.append(loss.data.numpy()[0])  
                
                right_ratio=1.0*np.sum([i[0] for i in rights])/np.sum([i[1] for i in rights])  #将校验集上的平均准确度计算出来
                
                print('地{}轮,训练损失:{:2f},校验损失:{:2f},校验准确率:{:2f}'format(epoch,np.mean(losses)...))

 

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值