深度学习(21)——关于训练过程中loss和acc固若磐石

深度学习(21)——关于训练过程中loss和acc固若磐石

1. 背景描述

最近在做时间序列,思路清晰明朗,model全部搭建好了,但是loss和acc固若磐石,稳步不动。还是分类任务,因为是之前调试过的代码,后来自己手写了一遍(对自己非常有信心!)结果,就出现了这种情况。

2. 问题排查

听师兄的话,一定会找到bug的原因。我去掉时间序列,直接用自己手写的代码去做分类,竟然出现和上面同样的情况,OOTD,麻了。debug吧!在loss的地方跳了又跳,检查了又检查,都没查出错误,一天过去了。今天早上对着代码又检查,oh no,被自己蠢到了!
我的loss:预测的label和真实的label在做loss

_, output = model(images.to(device))
pred_class = torch.sigmoid(output).gt(0.5).int()
accu_num += torch.eq(pred_class.squeeze_(), labels.to(device)).sum()  # 正确的个数
loss = loss_function(pred_class.float(), labels.to(device).float())

在这里插入图片描述

loss = loss_function(pred_class.float(), labels.to(device).float())扪心自问:这loss能这样写吗???这不是难为机器吗???机器内心独白:大人啊!只有0和1这些标签,让我学什么??这不是难为我吗??

3. 来吧!解决问题!

得到预测的分类结果(0,1,2,3,4…这种离散结果)只用于计算模型预测的准确个数,loss是需要让他反向传播去学习怎么变化的,所以应该是他和真实值之间的差异!正确的写法:
loss = loss_function(output.float(), labels.to(device).float())
在这里插入图片描述
886,只希望自己以后少出现这种低级错误!

猜你喜欢

转载自blog.csdn.net/qq_43368987/article/details/129633594