赞
踩
引入背景:文本的长度是不固定的,而神经网络所需要的输入个数是固定的,而磁袋模型就可以很好地解决这一问题。(与顺序无关,就像东西放入袋中)
已知条件: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)...))
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。