1、其实在没训练完 一轮 之后,可以对它进行一个测试,在测试数据集上跑一遍
以测试集上的损失或者正确率来评估模型是否训练好
2、在测试的过程中不需要进行调优,所以可以用 with torch.no_grad():
#测试步骤: total_test_loss=0 #记录总的损失差 with torch.no_grad(): for data in test_dataloader: imgs,targets=data outputs=tuidui(imgs) loss=loss_fn(outputs,targets) #这个loss只是一条数据的,要求在测试集上的总的损失 total_test_loss=total_test_loss+loss.item() print('整体的测试集上的loss:{}',format(total_test_loss))
3、对于打印要求的设置:
#可以进行打印设置:每训练100次,打印一次 if total_test_step%100==0: print('训练次数:{},loss:{}'.format(total_train_step,loss.item()))
4、使用tensorboard来进行可视化
'''添加tensorboard;把每一次的训练进行可视化'''
writer=SummaryWriter('logs')
for i in range(epoch):
print('--------第{}轮训练开始----------'.format(i+1))
#训练步骤开始
for data in train_dataloader:
imgs,targets=data
outputs=tuidui(imgs)
loss=loss_fn(outputs,targets)
#进行优化的第一步是梯度清零
optimizer.zero_grad()
#利用损失来求每一个参数节点的梯度
loss.backward()
#进行优化
optimizer.step()
#更新训练次数
total_train_step+=1
#可以进行打印设置:每训练100次,打印一次
if total_test_step%100==0:
print('训练次数:{},loss:{}'.format(total_train_step,loss.item()))
#loss.item(),使用item会让tensor类型的数据直接变成数字,数值型
writer.add_scalar('train_loss',loss.item(),total_train_step)
#测试步骤:
total_test_loss=0 #记录总的损失差
with torch.no_grad():
for data in test_dataloader:
imgs,targets=data
outputs=tuidui(imgs)
loss=loss_fn(outputs,targets) #这个loss只是一条数据的,要求在测试集上的总的损失
total_test_loss=total_test_loss+loss.item()
print('整体的测试集上的loss:{}',format(total_test_loss))
writer.add_scalar('test_loss',total_test_loss,total_test_step)
total_test_step=total_test_step+1
writer.close()
5、测试模型的正确率
模型中我们的输出output是概率值的形式,并不是标签的形式。
转换:
Argmax,它可以输出横向中概率值最大的那个的位置索引。转化完之后,再让模型输出的标签和真实图像的标签进行比较。如果全部相等则表明预测全部正确,如果个数不一致代表不相等。
标签:24,loss,训练,是否,item,step,test,total From: https://www.cnblogs.com/ar-boke/p/17158298.html