24、检查所训练的模型是否训练好,是否达到预期目标

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,它可以输出横向中概率值最大的那个的位置索引。转化完之后,再让模型输出的标签和真实图像的标签进行比较。如果全部相等则表明预测全部正确,如果个数不一致代表不相等。

 

 

 

 

 

 

 

 

 

posted @ 2023-02-27 11:24  bokeAR  阅读(343)  评论(0)    收藏  举报