【图像分类】记录一个天坑:二分类网络使用CrossEntropyLoss,loss一直在0.69不收敛的问题

最近在尝试用CrossEntropyLoss(),实现猫狗图像分类的功能。遇到了一个奇怪的问题:loss一直停留在0.69附近,我查了查loss函数的公式,公式如下:

【图像分类】记录一个天坑:二分类网络使用CrossEntropyLoss,loss一直在0.69不收敛的问题




网络预测给出的二类概率向量为[0.5,0.5],也就是a和1-a都是0.5,不管y取值0/1,整个的平均loss就是-ln(0.5)=0.69,这样网络根本没有学习到东西。


我用的模型是resnet18,后来尝试使用预训练模型发现loss可以收敛,但是不用预训练模型就拉跨了。


在网上查找了很多解决方案,放在我的模型里都没有起作用。直到我发现了这篇文章:


神经网络训练常见坑 - 知乎 (zhihu.com)


13. 你是否应用了过量的数据增强?

数据增强有正则化效果。过量的数据增强,加上其它形式的正则化(权重 L2,dropout操作,等等)可能会导致网络欠拟合。


突然想到我是不是用的数据增强不对,或者对于我的模型来说不适用。于是我把增强的代码注释了


transform = transforms.Compose([

   transforms.Resize((128, 128)),

   # transforms.RandomVerticalFlip(),

   # transforms.RandomCrop(50),

   # transforms.ColorJitter(brightness=0.5, contrast=0.5, hue=0.5),

   transforms.ToTensor(),

   transforms.Normalize([0.5, 0.5, 0.5], [0.5, 0.5, 0.5])

])

然后就可以收敛了:

【图像分类】记录一个天坑:二分类网络使用CrossEntropyLoss,loss一直在0.69不收敛的问题




看来图像增强不能乱用,用的不好还能起负作用。


上一篇:msn密码获取软件


下一篇:收集了26个程序员的程序人生回忆