文本分类-文本情绪识别(自己理解用)

1.词袋模型编码
2.构造一个分类器
这个神经网络有输入层有7139个单元(分别接受语料编码中的每个维度的信息)
有十个隐含层单元(处理高级信息)
输出层两个单元(区分评论是正面的还是负面的)二分类问题
此神经网络会最终输出两个实数,取最大的一个进行判断

model=nn.Sequential(
	nn.Linear(7139,10),#实现从输入层到隐含层的线性映射
	nn.Relu(), #在隐含层的非线性部分,是非线性激活函数
	nn.Linear(10,2),#实现从隐含层到输出层的线性映射
	nn.logSoftmax(dim=1),#用于输出分类的softmax函数,输出值是概率值,取最大的值
}

3.数据处理和训练
为了防止过拟合,我们将数据分成了训练集(training)、验证集(validation)、测试集(test)
训练集训练数据
验证机集调整超参数,以判断是否要停止训练
测试集对模型进行测试,评判模型的好坏

cost=torch.nn.NLLLoss()#损失函数为交叉熵
#优化算法是Adam,可以自动调节学习率
optimizer=torch.optim.Adam(model.parameter(),lr=0.01)
#定义循环训练 循环10个epoch
records=[]
losses=[]
for epoch in range(10):
	for i,data in enumerate(zip(train_data, train_label)): #在每一个epoch中对数据进行分批次循环
		x,y=data#读入一个batch的数据
		#调整为标准的数据格式
		x=Variable(torch.FloatTensor(x),view(1,-1))
		y=Variable(torch.LongTensor(np.array([y])))
		optimizer.zero_grad()#清空优化器的梯度
		predict=model(x)#模型预测
		loss=cost(predict,y)#计算损失函数
		losses.append(loss.data.numpy()[0])#将损失函数的数值加入到列表中
		loss.backward()#开始进行梯度反向传播
		optimizer.step()#开始对参数进行进一步优化
	if i%3000==0:
		val_losses=[]
		rights=[]#在验证集上实验
		for j, val in enumerate(zip(valid_data,valid_label)):
			x,y=val
			x=Variable(torch.FloatTensor(x),view(1,-1))
			y=Variable(torch.LongTensor(np.array([y])))
			predict=model(x)
			#调用rightness函数计算准确度
			right=rightness(predict,y)
			rights.append(right)
			loss=cost(predict,y)
			val_losses.append(loss.data.numpy()[0])
			#将验证集上的平均准确度计算出来
			right_radio=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),np.
			records.append([np.mean(),np.mean(val_losses),right_ratio])
			
  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值