当前位置:   article > 正文

Python——pytorch进行文本分类_pytorch文本分类

pytorch文本分类

一.词袋模型

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

已知条件:N句话

做法

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

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

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

  二.构造一个分类器

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

  三.损失函数和优化器

  1. #损失函数
  2. cost=torch.nn.NLLLoss()
  3. #优化器Adam优化算法,相比SGD可以自动调节学习率
  4. optimizer=torch.optim.Adam(model.parameters,lr=0.01)
  5. records=[] #循环10个Epoch
  6. losses=[]
  7. for epoch in range(10):
  8. for i,data in enumerate(train_data,train_label): #在每一个epoch中对训练数据进行分批循环
  9. x,y=data #读入一批的数据
  10. #调整为标准的数据格式
  11. x=Variable(torch.FloatTensor(x).view(1,-1))
  12. y=Variable(torch.FloatTensor(np.array([y])))
  13. optimizer.zero_grad()
  14. #模型预测
  15. predict=model(x)
  16. loss=cost(predict,y)
  17. loss.backward()
  18. optimizer.step()
  19. if i%3000==0: #每隔3000个batch,就在校验集上跑一遍模型
  20. val_losses=[]
  21. right=[]
  22. for i,val in enumerate(zip(vaild_data,vaild_label)):
  23. x,y=val
  24. x=Variable(torch.FloatTensor(x).view(-1,1))
  25. y=Variable(torch.LongTensor(np.array([y])))
  26. predict=model(x)
  27. right=rightness(predict,y)
  28. rights.append(right)
  29. loss=cos(predict,y)
  30. val_losses.append(loss.data.numpy()[0])
  31. right_ratio=1.0*np.sum([i[0] for i in rights])/np.sum([i[1] for i in rights]) #将校验集上的平均准确度计算出来
  32. print('地{}轮,训练损失:{:2f},校验损失:{:2f},校验准确率:{:2f}'format(epoch,np.mean(losses)...))

 

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop】
推荐阅读
相关标签
  

闽ICP备14008679号