模型训练过程输出正常,跑验证集时某个分支输出效果很差(基于pytorch)

12 篇文章 0 订阅
6 篇文章 1 订阅

本文这是我宝贵的实战经验,看到的朋友请给我一打赞,非常感谢!!!

问题说明

最近我修改了一个模型,增加了一个分支。模型训练过程中各个分支输出正常,但是在跑验证集时某个分支输出效果很差,输出内容几乎是一副黑图,啥东西都没有。我做了网友给的两个解决办法,还是没能解决我的问题。

一开始我很烦躁,因为之前在其他模型测试没有这个问题,代码也是差不多的,只是模型文件不同,所以没有什么思路。

此时,我开启了网络寻答之路,网友们反馈的是

1、可能是你数据没有归一化。但是我的数据已经归一化了。(最后发现是我的gt数据有问题,因为gt数据是自己生成的,不是二值化,是灰度图,最后对灰度图进行了一些处理解决了问题,详见最后一节解决方案)

2、还有一个网友说,他出现了这种情况,他的解决办法是在跑验证集或者测试集的时候把model.eval()去掉,我尝试了一下,发现原来没有输出的分支有内容输出了,但是整个模型其他分支的输出比加上model.eval()时差了很多。  所以这个办法也不适合我。

 

探索

寻答无果,我开启了自己的探索之路,自己的思路是,

从三个方面下手

1、代码的问题

2、模型结构的问题

3、训练数据的问题

然后我就开始了我的探索之路了,

 

发现问题

第1点代码的问题,由于我之前其他模型都是用这套代码所以可能性不大。

第2点模型结构问题,我试过调整成其他结构,但是效果不明显。所以直接进入第3点,是否是训练数据有问题。

经过层层排查,我发现的确是训练数据中的gt有问题

我是做SOD的,利用FP来做SOD,FP的gt图片都是需要自己生成的,是生成的时候使用了高斯模糊,然后原本只有几个点是有 值的,后面经过高斯模糊后,图片有值的地方就多起来了,经过二值化测试发现,经过高斯化后大部分区域都有值。

跟正常情况进行对比,是发现、解决问题的一个简单快捷的方法

基于该原则,我对比了sod的gt,sod的gt都是二值化,而fp的gt经过高斯化后大部分区域都有值,我当时怀疑这个可能是一个原因,所以进行了尝试。

 

解决方案

然后我做了一个简单的处理,通过阈值决定数据的去留。高于阈值的保留,低于阈值的直接置为零。

按照新算法重新生成了fp的gt后,重新训练模型,发现训练过程中跑 验证代码后之前没有输出的分支,也正常了!

本文这是我宝贵的实战经验,看到的朋友请给我一打赞,非常感谢!!!非常感谢!!!

可能原因分析

我怀疑可能是图片上微小值太多的点会对模型的学习产生不良的影响,简单地说,我怀疑这些点对模型来说就是干扰、噪点,因为这些点的干扰,导致了模型无法正确学习到需要学到的内容。

 

以上为自己的尝试与愚见,请大神们多多指点。

坚持原创不容易,若此文对你有帮助,请给我来一打赞,非常感谢!!!

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值