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

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

网络预测给出的二类概率向量为[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])

])
复制代码

然后就可以收敛了:

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

Guess you like

Origin juejin.im/post/7012922111702335496