zoukankan      html  css  js  c++  java
  • 在二分类问题中,准确率一直处于50%上下的解决方法

    最近在 猫狗识别 项目中,不知为何准确率(训练集准确率和验证集准确率)一直处于0.5左右,这说明网络根本没有学习。后来查阅了许多他人的经验,并做了总结。

    首先谈谈我的是如何解决的:

    • 网络结构:AlexNet
    • 优化器:Adam (这里正是问题所在)
    • 框架:PyTorch

    关于优化器,我最开始使用的的是 torch.optim.Adam(),但是训练100个Epoch后,准确率始终在 49% ~ 50%。

    解决方法: 换个优化器!我使用的是 torch.optim.SGD(),其他的或许也行,但我还没有尝试。

    Note:

    出现以上问题时,我们会发现 loss 是 0.69,这是因为输出 0, 1 的概率都是0.5,而 (-ln 0.5=0.69)


    网络上也有一些解决方法,可以对照检查自己的代码:

    1. 训练数据需要打乱,要检查每此batch是否都是一个类别,如果是,则没有办法优化;
    2. 检查网络是不是没有回传梯度,而是只做了前向运算;
    3. 检查输入数据是否有做标准化,可能直接传入 (0 sim 255) 像素进去了;
    4. 二分类问题中 0.5 的 acc 接近随机猜测的值,可以检查下标签是否标错;
    5. 检查参数有没有初始化;
    6. 检查第一层的卷积输出是否正常,是不是全 0 之类的;
    7. 尝试不同的 Learning Rate;
    8. 检查是否在 logit 那层加了激活函数,导致 logits 有问题,例如全为 0,经过 softmax 后就是 0.5了
  • 相关阅读:
    CF1539 VP 记录
    CF1529 VP 记录
    CF875C National Property 题解
    CF1545 比赛记录
    CF 1550 比赛记录
    CF1539E Game with Cards 题解
    CF1202F You Are Given Some Letters... 题解
    vmware Linux虚拟机挂载共享文件夹
    利用SOLR搭建企业搜索平台 之九(solr的查询语法)
    利用SOLR搭建企业搜索平台 之四(MultiCore)
  • 原文地址:https://www.cnblogs.com/xxxxxxxxx/p/11508020.html
Copyright © 2011-2022 走看看